(* 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/ *) exception Not_implemented of string let not_implemented feature = raise (Not_implemented feature) (** exceptions whose content should be presented to the user *) exception Failure of string let error s = raise (Failure s) let warning s = prerr_endline ("MATITA WARNING:\t" ^ s) let debug_print s = if BuildTimeConf.debug then prerr_endline ("MATITA DEBUG:\t" ^ s) exception No_proof (** no current proof is available *) let untitled_con_uri = UriManager.uri_of_string "cic:/untitled.con" let untitled_def_uri = UriManager.uri_of_string "cic:/untitled.ind" let unopt_uri ?(kind = `Con) = function | Some uri -> uri | None -> (match kind with `Con -> untitled_con_uri | `Def -> untitled_def_uri) class type parserr = (* "parser" is a keyword :-( *) object method parseTerm: char Stream.t -> DisambiguateTypes.term method parseTactical: char Stream.t -> DisambiguateTypes.tactical end class type disambiguator = object method parserr: parserr method setParserr: parserr -> unit method env: DisambiguateTypes.environment method setEnv: DisambiguateTypes.environment -> unit (* TODO Zack: as long as matita doesn't support MDI inteface, * disambiguateTerm will return a single term *) (** @param env disambiguation environment. If this parameter is given the * disambiguator act statelessly, that is internal disambiguation status * want be changed but only returned. If this parameter is not given the * internal one will be used and updated with the disambiguation status * resulting from the disambiguation *) method disambiguateTerm: ?context:Cic.context -> ?metasenv:Cic.metasenv -> ?env:DisambiguateTypes.environment -> char Stream.t -> (DisambiguateTypes.environment * Cic.metasenv * Cic.term) (** @param env @see disambiguateTerm above *) method disambiguateTermAst: ?context:Cic.context -> ?metasenv:Cic.metasenv -> ?env:DisambiguateTypes.environment -> DisambiguateTypes.term -> (DisambiguateTypes.environment * Cic.metasenv * Cic.term) end type sequents_metadata = (int * (** sequent (meta) index *) (Cic.annconjecture * (** annotated conjecture *) (Cic.id, Cic.term) Hashtbl.t * (** ids_to_terms *) (Cic.id, Cic.id option) Hashtbl.t * (** ids_to_father_ids *) (Cic.id, string) Hashtbl.t * (** ids_to_inner_sorts *) (Cic.id, Cic.hypothesis) Hashtbl.t)) (** ids_to_hypotheses *) list type proof_metadata = Cic.annobj * (** annotated object *) (Cic.id, Cic.term) Hashtbl.t * (** ids_to_terms *) (Cic.id, Cic.id option) Hashtbl.t * (** ids_to_father_ids *) (Cic.id, string) Hashtbl.t * (** ids_to_inner_sorts *) (Cic.id, Cic2acic.anntypes) Hashtbl.t * (** ids_to_inner_types *) (Cic.id, Cic.conjecture) Hashtbl.t * (** ids_to_conjectures *) (Cic.id, Cic.hypothesis) Hashtbl.t (** ids_to_hypotheses *) type hist_metadata = proof_metadata * sequents_metadata class type proof = object inherit [hist_metadata] StatefulProofEngine.status (** return a pair of "xml" (as defined in Xml module) representing the * * current proof type and body, respectively *) method toXml: Xml.token Stream.t * Xml.token Stream.t method toString: string end type proof_handler = { get_proof: unit -> proof; (* return current proof or fail *) abort_proof: unit -> unit;(* abort current proof, cleaning up garbage *) has_proof: unit -> bool; (* check if a current proof is available or not *) new_proof: proof -> unit; (* as a set_proof but takes care also to register observers *) quit: unit -> unit } (** interpreter for toplevel phrases given via console *) class type interpreter = object method reset: unit (** return the interpreter to the initial state *) method evalPhrase: string -> unit end (** {2 MathML widgets} *) type mml_of_cic_sequent = Cic.metasenv -> int * Cic.context * Cic.term -> Gdome.document * ((Cic.id, Cic.term) Hashtbl.t * (Cic.id, Cic.id option) Hashtbl.t * (string, Cic.hypothesis) Hashtbl.t) type mml_of_cic_object = explode_all:bool -> UriManager.uri -> Cic.annobj -> (string, string) Hashtbl.t -> (string, Cic2acic.anntypes) Hashtbl.t -> Gdome.document class type proof_viewer = object inherit GMathViewAux.single_selection_math_view method load_proof: Gdome.document -> proof_metadata -> unit end class type sequent_viewer = object inherit GMathViewAux.multi_selection_math_view (** @return the list of selected terms. Selections which are not terms are * ignored *) method get_selected_terms: Cic.term list (** @return the list of selected hypothese. Selections which are not * hypotheses are ignored *) method get_selected_hypotheses: Cic.hypothesis list (** load a sequent and render it into parent widget *) method load_sequent: Gdome.document -> sequents_metadata -> int -> unit end class type sequents_viewer = object method reset: unit method load_sequents: sequents_metadata -> unit method goto_sequent: int -> unit (* to be called _after_ load_sequents *) end (** {2 shorthands} *) type namer = ProofEngineTypes.mk_fresh_name_type type choose_uris_callback = selection_mode:[`MULTIPLE|`SINGLE] -> ?title:string -> ?msg:string -> ?nonvars_button:bool -> string list -> string list type choose_interp_callback = (string * string) list list -> int list