+++ /dev/null
-(* Copyright (C) 2004, HELM Team.
- *
- * This file is part of HELM, an Hypertextual, Electronic
- * Library of Mathematics, developed at the Computer Science
- * Department, University of Bologna, Italy.
- *
- * HELM is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * HELM is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HELM; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
- *
- * For details, see the HELM World-Wide-Web page,
- * http://helm.cs.unibo.it/
- *)
-
-(** Stateful handling of proof status *)
-
-exception No_goal_left
-exception Uri_redefinition
-
-type event = [ `Proof_changed | `Proof_completed ]
-
-val all_events: event list
-
- (** from our point of view a status is the status of an incomplete proof, thus
- * we have an optional goal which is None if the proof is not yet completed
- * (i.e. some goal is still open) *)
-type proof_status = ProofEngineTypes.proof * ProofEngineTypes.goal option
-
- (** Proof observer. First callback argument is Some extended_status
- * when a 'real 'change of the proof happened and None when Proof_changed event
- * was triggered by a time travel by the means of undo/redo actions or by an
- * external "#notify" invocation. Embedded status is the status _before_ the
- * current change. Second status is the status reached _after_ the current
- * change. *)
-type 'a observer = (proof_status * 'a) option -> (proof_status * 'a) -> unit
-
- (** needed to detach previously attached observers *)
-type observer_id
-
- (** tactic application failed. @see apply_tactic *)
-exception Tactic_failure of exn
-
- (** one or more observers failed. @see apply_tactic *)
-exception Observer_failures of (observer_id * exn) list
-
- (** failure while updating internal data (: 'a). @see apply_tactic *)
-exception Data_failure of exn
-
-(** {2 OO interface} *)
-
-class ['a] status:
- ?history_size:int -> (** default 20 *)
- ?uri:UriManager.uri ->
- typ:Cic.term -> body:Cic.term -> metasenv:Cic.metasenv ->
- (proof_status -> 'a) -> (* init data *)
- (proof_status * 'a -> proof_status -> 'a) -> (* update data *)
- unit ->
- object
-
- method proof: ProofEngineTypes.proof
- method metasenv: Cic.metasenv
- method body: Cic.term
- method typ: Cic.term
-
- (** change metasenv _without_ triggering any notification *)
- method set_metasenv: Cic.metasenv -> unit
-
- (** goal -> conjecture
- * @raise CicUtil.Meta_not_found *)
- method conjecture: int -> Cic.conjecture
-
- method proof_completed: bool
- method goal: int (** @raise No_goal_left *)
- method set_goal: int -> unit (** @raise Data_failure *)
-
- method uri: UriManager.uri option
- method set_uri: UriManager.uri -> unit (** @raise Uri_redefinition *)
-
- (** @raise Tactic_failure
- * @raise Observer_failures
- * @raise Data_failure
- *
- * In case of tactic failure, internal status is left unchanged.
- * In case of observer failures internal status will be changed and is
- * granted that all observer will be invoked collecting their failures.
- * In case of data failure, internal status is left unchanged (rolling back
- * last tactic application if needed)
- *)
- method apply_tactic: ProofEngineTypes.tactic -> unit
-
- method undo: ?steps:int -> unit -> unit
- method redo: ?steps:int -> unit -> unit
-
- method attach_observer:
- ?interested_in:(event list) -> 'a observer -> observer_id
-
- method detach_observer: observer_id -> unit
-
- (** force a notification to all observer, old status is passed as None *)
- method notify: unit
-
- end
-
-val trivial_status:
- ?uri:UriManager.uri ->
- typ:Cic.term -> body:Cic.term -> metasenv:Cic.metasenv ->
- unit ->
- unit status
-