(* 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/ *) open Printf exception Not_implemented of string let not_implemented feature = raise (Not_implemented feature) 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) let explain = function | StatefulProofEngine.Tactic_failure exn -> sprintf "Tactic failed: %s"(Printexc.to_string exn) | StatefulProofEngine.Observer_failures exns -> String.concat "\n" (List.map (fun (_, exn) -> Printexc.to_string exn) exns) | CicTextualParser2.Parse_error (floc, msg) -> let (x, y) = CicAst.loc_of_floc floc in sprintf "parse error at character %d-%d: %s" x y msg | CicEnvironment.Object_not_found uri -> sprintf "object not found: %s" (UriManager.string_of_uri uri) | exn -> sprintf "Uncaught exception: %s" (Printexc.to_string exn) exception No_proof exception Cancel exception Unbound_identifier of string (* 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) *) let unopt_uri = function Some uri -> uri | None -> assert false 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 console = object method echo_message : string -> unit method echo_error : string -> unit method clear : unit -> unit method wrap_exn : 'a. (unit -> 'a) -> 'a option method choose_uri : string list -> string method show : ?msg:string -> unit -> unit end 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 class type disambiguator = object method env: DisambiguateTypes.environment method setEnv: DisambiguateTypes.environment -> unit method chooseUris: choose_uris_callback method setChooseUris: choose_uris_callback -> unit method chooseInterp: choose_interp_callback method setChooseInterp: choose_interp_callback -> unit method parserr: parserr method disambiguateTerm: ?context:Cic.context -> ?metasenv:Cic.metasenv -> ?env:DisambiguateTypes.environment -> char Stream.t -> (DisambiguateTypes.environment * Cic.metasenv * Cic.term * CicUniv.universe_graph) method disambiguateTermAst: ?context:Cic.context -> ?metasenv:Cic.metasenv -> ?env:DisambiguateTypes.environment -> DisambiguateTypes.term -> (DisambiguateTypes.environment * Cic.metasenv * Cic.term * CicUniv.universe_graph) method disambiguateTermAsts: ?metasenv:Cic.metasenv -> ?env:DisambiguateTypes.environment -> DisambiguateTypes.term list -> (DisambiguateTypes.environment * Cic.metasenv * Cic.term list * CicUniv.universe_graph) end class type proof = object inherit [unit] StatefulProofEngine.status method toXml: Xml.token Stream.t * Xml.token Stream.t method toString: string end class type currentProof = object method onGoing: unit -> bool method proof: proof method start: proof -> unit method abort: unit -> unit method quit: unit -> unit end type command_outcome = bool * bool type script_item = [ `Tactic | `Theorem | `Qed of UriManager.uri | `Def of UriManager.uri | `Inductive of UriManager.uri ] class type interpreter = object method evalAst : DisambiguateTypes.tactical -> command_outcome method evalPhrase : string -> command_outcome (* method evalStream: char Stream.t -> command_outcome *) method endOffset : int method lastItem: script_item option method setState: [`Proof | `Command] -> unit method setEvalAstCallback: (DisambiguateTypes.tactical -> unit) -> unit end type term_source = [ `Ast of DisambiguateTypes.term | `Cic of Cic.term | `String of string ] class type mathViewer = object method checkTerm: term_source -> unit end class type cicBrowser = object method loadUri: string -> unit method loadTerm: term_source -> unit end type mml_of_cic_sequent = Cic.metasenv -> Cic.conjecture -> 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 type namer = ProofEngineTypes.mk_fresh_name_type let mono_uris_callback ~selection_mode ?title ?msg ?nonvars_button _ = raise (Failure "ambiguous input") let mono_interp_callback _ = raise (Failure "ambiguous input")