src/Pure/Isar/isar_cmd.ML
changeset 27562 bcb01eb565ee
parent 27493 f05b6944319c
child 27574 4adce8310643
equal deleted inserted replaced
27561:a928e3439067 27562:bcb01eb565ee
    46   val exit: Toplevel.transition -> Toplevel.transition
    46   val exit: Toplevel.transition -> Toplevel.transition
    47   val quit: Toplevel.transition -> Toplevel.transition
    47   val quit: Toplevel.transition -> Toplevel.transition
    48   val pr: string list * (int option * int option) -> Toplevel.transition -> Toplevel.transition
    48   val pr: string list * (int option * int option) -> Toplevel.transition -> Toplevel.transition
    49   val disable_pr: Toplevel.transition -> Toplevel.transition
    49   val disable_pr: Toplevel.transition -> Toplevel.transition
    50   val enable_pr: Toplevel.transition -> Toplevel.transition
    50   val enable_pr: Toplevel.transition -> Toplevel.transition
    51   val redo: Toplevel.transition -> Toplevel.transition
       
    52   val undos_proof: int -> Toplevel.transition -> Toplevel.transition
       
    53   val kill_proof_notify: (unit -> unit) -> Toplevel.transition -> Toplevel.transition
       
    54   val kill_proof: Toplevel.transition -> Toplevel.transition
       
    55   val undo_theory: Toplevel.transition -> Toplevel.transition
       
    56   val undo: Toplevel.transition -> Toplevel.transition
       
    57   val cannot_undo: string -> Toplevel.transition -> Toplevel.transition
       
    58   val kill: Toplevel.transition -> Toplevel.transition
       
    59   val back: Toplevel.transition -> Toplevel.transition
       
    60   val ml_diag: bool -> string * Position.T -> Toplevel.transition -> Toplevel.transition
    51   val ml_diag: bool -> string * Position.T -> Toplevel.transition -> Toplevel.transition
    61   val nested_command: Markup.property list -> string * Position.T -> Toplevel.transition
    52   val nested_command: Markup.property list -> string * Position.T -> Toplevel.transition
    62   val cd: Path.T -> Toplevel.transition -> Toplevel.transition
    53   val cd: Path.T -> Toplevel.transition -> Toplevel.transition
    63   val pwd: Toplevel.transition -> Toplevel.transition
    54   val pwd: Toplevel.transition -> Toplevel.transition
    64   val display_drafts: Path.T list -> Toplevel.transition -> Toplevel.transition
    55   val display_drafts: Path.T list -> Toplevel.transition -> Toplevel.transition
   280 val local_default_proof = Toplevel.proofs Proof.local_default_proof;
   271 val local_default_proof = Toplevel.proofs Proof.local_default_proof;
   281 val local_immediate_proof = Toplevel.proofs Proof.local_immediate_proof;
   272 val local_immediate_proof = Toplevel.proofs Proof.local_immediate_proof;
   282 val local_done_proof = Toplevel.proofs Proof.local_done_proof;
   273 val local_done_proof = Toplevel.proofs Proof.local_done_proof;
   283 val local_skip_proof = Toplevel.proofs' Proof.local_skip_proof;
   274 val local_skip_proof = Toplevel.proofs' Proof.local_skip_proof;
   284 
   275 
   285 val skip_local_qed =
   276 val skip_local_qed = Toplevel.skip_proof (fn i => if i > 1 then i - 1 else raise Toplevel.UNDEF);
   286   Toplevel.skip_proof (History.apply (fn i => if i > 1 then i - 1 else raise Toplevel.UNDEF));
       
   287 
   277 
   288 
   278 
   289 (* global endings *)
   279 (* global endings *)
   290 
   280 
   291 fun global_qed m = Toplevel.end_proof (K (Proof.global_qed (m, true)));
   281 fun global_qed m = Toplevel.end_proof (K (Proof.global_qed (m, true)));
   341   (set_limit goals_limit lim1; set_limit ProofContext.prems_limit lim2; Toplevel.quiet := false;
   331   (set_limit goals_limit lim1; set_limit ProofContext.prems_limit lim2; Toplevel.quiet := false;
   342     PrintMode.with_modes modes (Toplevel.print_state true) state));
   332     PrintMode.with_modes modes (Toplevel.print_state true) state));
   343 
   333 
   344 val disable_pr = Toplevel.imperative (fn () => Toplevel.quiet := true);
   334 val disable_pr = Toplevel.imperative (fn () => Toplevel.quiet := true);
   345 val enable_pr = Toplevel.imperative (fn () => Toplevel.quiet := false);
   335 val enable_pr = Toplevel.imperative (fn () => Toplevel.quiet := false);
   346 
       
   347 
       
   348 (* history commands *)
       
   349 
       
   350 val redo =
       
   351   Toplevel.history History.redo o
       
   352   Toplevel.actual_proof ProofHistory.redo o
       
   353   Toplevel.skip_proof History.redo;
       
   354 
       
   355 fun undos_proof n =
       
   356   Toplevel.actual_proof (fn prf =>
       
   357     if ProofHistory.is_initial prf then raise Toplevel.UNDEF else funpow n ProofHistory.undo prf) o
       
   358   Toplevel.skip_proof (fn h =>
       
   359     if History.is_initial h then raise Toplevel.UNDEF else funpow n History.undo h);
       
   360 
       
   361 fun kill_proof_notify (f: unit -> unit) = Toplevel.history (fn hist =>
       
   362   if is_some (Toplevel.theory_node (History.current hist)) then raise Toplevel.UNDEF
       
   363   else (f (); History.undo hist));
       
   364 
       
   365 val kill_proof = kill_proof_notify (K ());
       
   366 
       
   367 val undo_theory = Toplevel.history (fn hist =>
       
   368   if History.is_initial hist then raise Toplevel.UNDEF else History.undo hist);
       
   369 
       
   370 val undo = Toplevel.kill o undo_theory o Toplevel.undo_exit o undos_proof 1;
       
   371 
       
   372 fun cannot_undo "end" = undo   (*ProofGeneral legacy*)
       
   373   | cannot_undo txt = Toplevel.imperative (fn () => error ("Cannot undo " ^ quote txt));
       
   374 
       
   375 val kill = Toplevel.kill o kill_proof;
       
   376 
       
   377 val back =
       
   378   Toplevel.actual_proof ProofHistory.back o
       
   379   Toplevel.skip_proof (History.apply I);
       
   380 
   336 
   381 
   337 
   382 (* diagnostic ML evaluation *)
   338 (* diagnostic ML evaluation *)
   383 
   339 
   384 fun ml_diag verbose (txt, pos) = Toplevel.keep (fn state =>
   340 fun ml_diag verbose (txt, pos) = Toplevel.keep (fn state =>