17 val apps: Univ -> Univ list -> Univ (*explicit applications*) |
17 val apps: Univ -> Univ list -> Univ (*explicit applications*) |
18 val abss: int -> (Univ list -> Univ) -> Univ |
18 val abss: int -> (Univ list -> Univ) -> Univ |
19 (*abstractions as closures*) |
19 (*abstractions as closures*) |
20 val same: Univ -> Univ -> bool |
20 val same: Univ -> Univ -> bool |
21 |
21 |
22 val univs_ref: (unit -> Univ list -> Univ list) option Unsynchronized.ref |
22 val put_result: (unit -> Univ list -> Univ list) -> Proof.context -> Proof.context |
23 val trace: bool Unsynchronized.ref |
23 val trace: bool Unsynchronized.ref |
24 |
24 |
25 val setup: theory -> theory |
25 val setup: theory -> theory |
26 val add_const_alias: thm -> theory -> theory |
26 val add_const_alias: thm -> theory -> theory |
27 end; |
27 end; |
226 end; |
226 end; |
227 |
227 |
228 |
228 |
229 (* nbe specific syntax and sandbox communication *) |
229 (* nbe specific syntax and sandbox communication *) |
230 |
230 |
231 val univs_ref = Unsynchronized.ref (NONE : (unit -> Univ list -> Univ list) option); |
231 structure Univs = Proof_Data( |
|
232 type T = unit -> Univ list -> Univ list |
|
233 fun init thy () = error "Univs" |
|
234 ); |
|
235 val put_result = Univs.put; |
232 |
236 |
233 local |
237 local |
234 val prefix = "Nbe."; |
238 val prefix = "Nbe."; |
|
239 val name_put = prefix ^ "put_result"; |
235 val name_ref = prefix ^ "univs_ref"; |
240 val name_ref = prefix ^ "univs_ref"; |
236 val name_const = prefix ^ "Const"; |
241 val name_const = prefix ^ "Const"; |
237 val name_abss = prefix ^ "abss"; |
242 val name_abss = prefix ^ "abss"; |
238 val name_apps = prefix ^ "apps"; |
243 val name_apps = prefix ^ "apps"; |
239 val name_same = prefix ^ "same"; |
244 val name_same = prefix ^ "same"; |
240 in |
245 in |
241 |
246 |
242 val univs_cookie = (name_ref, univs_ref); |
247 val univs_cookie = (Univs.get, put_result, name_put); |
243 |
248 |
244 fun nbe_fun 0 "" = "nbe_value" |
249 fun nbe_fun 0 "" = "nbe_value" |
245 | nbe_fun i c = "c_" ^ translate_string (fn "." => "_" | c => c) c ^ "_" ^ string_of_int i; |
250 | nbe_fun i c = "c_" ^ translate_string (fn "." => "_" | c => c) c ^ "_" ^ string_of_int i; |
246 fun nbe_dict v n = "d_" ^ v ^ "_" ^ string_of_int n; |
251 fun nbe_dict v n = "d_" ^ v ^ "_" ^ string_of_int n; |
247 fun nbe_bound v = "v_" ^ v; |
252 fun nbe_bound v = "v_" ^ v; |
387 val cs = map fst eqnss; |
392 val cs = map fst eqnss; |
388 in |
393 in |
389 s |
394 s |
390 |> traced (fn s => "\n--- code to be evaluated:\n" ^ s) |
395 |> traced (fn s => "\n--- code to be evaluated:\n" ^ s) |
391 |> pair "" |
396 |> pair "" |
392 |> ML_Context.evaluate ctxt (!trace) univs_cookie |
397 |> ML_Context.value ctxt univs_cookie |
393 |> (fn f => f deps_vals) |
398 |> (fn f => f deps_vals) |
394 |> (fn univs => cs ~~ univs) |
399 |> (fn univs => cs ~~ univs) |
395 end; |
400 end; |
396 |
401 |
397 |
402 |