190 (*read term, infer types, certify term*) |
190 (*read term, infer types, certify term*) |
191 fun read_def_cterm (sign, types, sorts) (a, T) = |
191 fun read_def_cterm (sign, types, sorts) (a, T) = |
192 let |
192 let |
193 val T' = Sign.certify_typ sign T |
193 val T' = Sign.certify_typ sign T |
194 handle TYPE (msg, _, _) => error msg; |
194 handle TYPE (msg, _, _) => error msg; |
195 val t = Syntax.read (#syn (Sign.rep_sg sign)) T' a; |
195 val ts = Syntax.read (#syn (Sign.rep_sg sign)) T' a; |
196 val (t', tye) = Sign.infer_types sign types sorts (t, T'); |
196 val (_, t', tye) = Sign.infer_types sign types sorts true (ts, T'); |
197 val ct = cterm_of sign t' |
197 val ct = cterm_of sign t' |
198 handle TERM (msg, _) => error msg; |
198 handle TERM (msg, _) => error msg; |
199 in (ct, tye) end; |
199 in (ct, tye) end; |
200 |
200 |
201 fun read_cterm sign = #1 o read_def_cterm (sign, K None, K None); |
201 fun read_cterm sign = #1 o read_def_cterm (sign, K None, K None); |
356 fun read_axm sg (name, str) = |
356 fun read_axm sg (name, str) = |
357 (name, no_vars (term_of (read_cterm sg (str, propT)))) |
357 (name, no_vars (term_of (read_cterm sg (str, propT)))) |
358 handle ERROR => err_in_axm name; |
358 handle ERROR => err_in_axm name; |
359 |
359 |
360 fun inferT_axm sg (name, pre_tm) = |
360 fun inferT_axm sg (name, pre_tm) = |
361 (name, no_vars (#1 (Sign.infer_types sg (K None) (K None) (pre_tm, propT)))) |
361 (name, no_vars (#2 (Sign.infer_types sg (K None) (K None) true ([pre_tm], propT)))) |
362 handle ERROR => err_in_axm name; |
362 handle ERROR => err_in_axm name; |
363 |
363 |
364 |
364 |
365 (* extend axioms of a theory *) |
365 (* extend axioms of a theory *) |
366 |
366 |