(* 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 class type proof = object inherit [unit] 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 *) set_proof: proof option -> unit; (* set a proof option as current proof *) 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 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 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: Cic.metasenv -> Cic.conjecture -> unit end class type proof_viewer = object inherit GMathViewAux.single_selection_math_view (** @return the annotated cic term and the ids_to_inner_types and * ids_to_inner_sorts maps *) method load_proof : UriManager.uri -> Cic.obj -> Cic.annobj * (Cic.id, Cic2acic.anntypes) Hashtbl.t * (Cic.id, string) Hashtbl.t 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