src/Pure/Isar/proof_history.ML
changeset 17073 dc1040419645
parent 16814 b829a6c9a87a
child 18678 dd0c569fa43d
equal deleted inserted replaced
17072:501c28052aea 17073:dc1040419645
    15   val current: T -> Proof.state
    15   val current: T -> Proof.state
    16   val previous: T -> Proof.state option
    16   val previous: T -> Proof.state option
    17   val clear: int -> T -> T
    17   val clear: int -> T -> T
    18   val undo: T -> T
    18   val undo: T -> T
    19   val redo: T -> T
    19   val redo: T -> T
    20   val back: bool -> T -> T
    20   val back: T -> T
    21   val applys: (Proof.state -> Proof.state Seq.seq) -> T -> T
    21   val applys: (Proof.state -> Proof.state Seq.seq) -> T -> T
    22   val apply: (Proof.state -> Proof.state) -> T -> T
    22   val apply: (Proof.state -> Proof.state) -> T -> T
    23 end;
    23 end;
    24 
    24 
    25 structure ProofHistory: PROOF_HISTORY =
    25 structure ProofHistory: PROOF_HISTORY =
    53 val clear = app o History.clear;
    53 val clear = app o History.clear;
    54 val undo = app History.undo;
    54 val undo = app History.undo;
    55 val redo = app History.redo;
    55 val redo = app History.redo;
    56 
    56 
    57 
    57 
    58 (* backtrack *)
    58 (* backtracking *)
    59 
    59 
    60 fun backtrack recur ((_, stq), nodes) =
    60 val back = hist_app (fn ((_, stq), nodes) =>
    61   (case Seq.pull stq of
    61   (case Seq.pull stq of
    62     NONE =>
    62     NONE => raise FAIL "back: no alternatives"
    63       if recur andalso not (null nodes) then
    63   | SOME result => (result, nodes)));
    64         (writeln "back: trying previous proof state ..."; backtrack recur (hd nodes, tl nodes))
       
    65       else raise FAIL "back: no alternatives"
       
    66   | SOME result => (result, nodes));
       
    67 
       
    68 val back = hist_app o backtrack;
       
    69 
    64 
    70 
    65 
    71 (* apply transformer *)
    66 (* apply transformer *)
    72 
    67 
    73 fun applys f = hist_app (fn (node as (st, _), nodes) =>
    68 fun applys f = hist_app (fn (node as (st, _), nodes) =>