32 val skip_proofs: bool Unsynchronized.ref |
32 val skip_proofs: bool Unsynchronized.ref |
33 val program: (unit -> 'a) -> 'a |
33 val program: (unit -> 'a) -> 'a |
34 val thread: bool -> (unit -> unit) -> Thread.thread |
34 val thread: bool -> (unit -> unit) -> Thread.thread |
35 type transition |
35 type transition |
36 val empty: transition |
36 val empty: transition |
37 val is_init: transition -> bool |
|
38 val print_of: transition -> bool |
37 val print_of: transition -> bool |
39 val name_of: transition -> string |
38 val name_of: transition -> string |
40 val pos_of: transition -> Position.T |
39 val pos_of: transition -> Position.T |
41 val str_of: transition -> string |
40 val str_of: transition -> string |
42 val name: string -> transition -> transition |
41 val name: string -> transition -> transition |
43 val position: Position.T -> transition -> transition |
42 val position: Position.T -> transition -> transition |
44 val interactive: bool -> transition -> transition |
43 val interactive: bool -> transition -> transition |
45 val set_print: bool -> transition -> transition |
44 val set_print: bool -> transition -> transition |
46 val print: transition -> transition |
45 val print: transition -> transition |
47 val no_timing: transition -> transition |
46 val no_timing: transition -> transition |
48 val init_theory: string -> (unit -> theory) -> transition -> transition |
47 val init_theory: (unit -> theory) -> transition -> transition |
|
48 val is_init: transition -> bool |
49 val modify_init: (unit -> theory) -> transition -> transition |
49 val modify_init: (unit -> theory) -> transition -> transition |
50 val exit: transition -> transition |
50 val exit: transition -> transition |
51 val keep: (state -> unit) -> transition -> transition |
51 val keep: (state -> unit) -> transition -> transition |
52 val keep': (bool -> state -> unit) -> transition -> transition |
52 val keep': (bool -> state -> unit) -> transition -> transition |
53 val imperative: (unit -> unit) -> transition -> transition |
53 val imperative: (unit -> unit) -> transition -> transition |
294 |
294 |
295 |
295 |
296 (* primitive transitions *) |
296 (* primitive transitions *) |
297 |
297 |
298 datatype trans = |
298 datatype trans = |
299 Init of string * (unit -> theory) | (*theory name, init*) |
299 Init of unit -> theory | (*init theory*) |
300 Exit | (*formal exit of theory*) |
300 Exit | (*formal exit of theory*) |
301 Keep of bool -> state -> unit | (*peek at state*) |
301 Keep of bool -> state -> unit | (*peek at state*) |
302 Transaction of (bool -> node -> node) * (state -> unit); (*node transaction and presentation*) |
302 Transaction of (bool -> node -> node) * (state -> unit); (*node transaction and presentation*) |
303 |
303 |
304 local |
304 local |
305 |
305 |
306 fun apply_tr _ (Init (_, f)) (State (NONE, _)) = |
306 fun apply_tr _ (Init f) (State (NONE, _)) = |
307 State (SOME (Theory (Context.Theory |
307 State (SOME (Theory (Context.Theory |
308 (Theory.checkpoint (Runtime.controlled_execution f ())), NONE)), NONE) |
308 (Theory.checkpoint (Runtime.controlled_execution f ())), NONE)), NONE) |
309 | apply_tr _ Exit (State (SOME (state as Theory (Context.Theory _, _)), _)) = |
309 | apply_tr _ Exit (State (SOME (state as Theory (Context.Theory _, _)), _)) = |
310 exit_transaction state |
310 exit_transaction state |
311 | apply_tr int (Keep f) state = |
311 | apply_tr int (Keep f) state = |
350 val empty = make_transition ("", Position.none, false, false, false, []); |
350 val empty = make_transition ("", Position.none, false, false, false, []); |
351 |
351 |
352 |
352 |
353 (* diagnostics *) |
353 (* diagnostics *) |
354 |
354 |
355 fun get_init (Transition {trans = [Init args], ...}) = SOME args |
|
356 | get_init _ = NONE; |
|
357 |
|
358 val is_init = is_some o get_init; |
|
359 |
|
360 fun print_of (Transition {print, ...}) = print; |
355 fun print_of (Transition {print, ...}) = print; |
361 fun name_of (Transition {name, ...}) = name; |
356 fun name_of (Transition {name, ...}) = name; |
362 fun pos_of (Transition {pos, ...}) = pos; |
357 fun pos_of (Transition {pos, ...}) = pos; |
363 fun str_of tr = quote (name_of tr) ^ Position.str_of (pos_of tr); |
358 fun str_of tr = quote (name_of tr) ^ Position.str_of (pos_of tr); |
364 |
359 |
395 val print = set_print true; |
390 val print = set_print true; |
396 |
391 |
397 |
392 |
398 (* basic transitions *) |
393 (* basic transitions *) |
399 |
394 |
400 fun init_theory name f = add_trans (Init (name, f)); |
395 fun init_theory f = add_trans (Init f); |
401 |
396 |
402 fun modify_init f tr = |
397 fun is_init (Transition {trans = [Init _], ...}) = true |
403 (case get_init tr of |
398 | is_init _ = false; |
404 SOME (name, _) => init_theory name f (reset_trans tr) |
399 |
405 | NONE => tr); |
400 fun modify_init f tr = if is_init tr then init_theory f (reset_trans tr) else tr; |
406 |
401 |
407 val exit = add_trans Exit; |
402 val exit = add_trans Exit; |
408 val keep' = add_trans o Keep; |
403 val keep' = add_trans o Keep; |
409 |
404 |
410 fun present_transaction f g = add_trans (Transaction (f, g)); |
405 fun present_transaction f g = add_trans (Transaction (f, g)); |