(* File to include to get some Coq facilities under the ocaml toplevel. This file is loaded by include *) #cd".";; #directory "parsing";; #directory "interp";; #directory "toplevel";; #directory "library";; #directory "kernel";; #directory "engine";; #directory "pretyping";; #directory "lib";; #directory "proofs";; #directory "tactics";; #directory "printing";; #directory "grammar";; #directory "intf";; #directory "stm";; #directory "vernac";; #directory "+camlp5";; (* Gramext is found in top_printers.ml *) #use "top_printers.ml";; #use "vm_printers.ml";; #install_printer (* identifier *) ppid;; #install_printer (* identifier *) ppidset;; #install_printer (* Intset.t *) ppintset;; #install_printer (* label *) pplab;; #install_printer (* mod_bound_id *) ppmbid;; #install_printer (* dir_path *) ppdir;; #install_printer (* module_path *) ppmp;; #install_printer (* section_path *) ppsp;; #install_printer (* qualid *) ppqualid;; #install_printer (* kernel_name *) ppkn;; #install_printer (* constant *) ppcon;; #install_printer (* projection *) ppproj;; #install_printer (* cl_index *) ppclindex;; #install_printer (* recarg Rtree.t *) ppwf_paths;; #install_printer (* constr *) print_pure_constr;; #install_printer (* patch *) ppripos;; #install_printer (* values *) ppvalues;; #install_printer (* Idpred.t *) pp_idpred;; #install_printer (* Cpred.t *) pp_cpred;; #install_printer ppzipper;; #install_printer ppstack;; #install_printer (* Reductionops.Stack.t *) pp_stack_t;; #install_printer ppatom;; #install_printer ppwhd;; #install_printer ppvblock;; #install_printer (* bigint *) ppbigint;; #install_printer (* loc *) pploc;; #install_printer (* substitution *) ppsubst;; (* Open main files *) open Names open Term open Vars open Context open Typeops open Term_typing open Univ open Inductive open Indtypes open Cooking open CClosure open Reduction open Safe_typing open Declare open Declaremods open Impargs open Libnames open Globnames open Nametab open Library open Cases open Pattern open Patternops open Cbv open Classops open Arguments_renaming open Pretyping open Cbv open Classops open Clenv open Clenvtac open Constr_matching open Glob_term open Glob_ops open Coercion open Recordops open Detyping open Reductionops open Evarconv open Retyping open Evarutil open Evarsolve open Tacred open Evd open Universes open Termops open Namegen open Indrec open Typing open Inductiveops open Locusops open Find_subterm open Unification open Miscops open Miscops open Nativenorm open Typeclasses open Typeclasses_errors open Vnorm open Constrextern open Constrintern open Coqlib open Genarg open Modintern open Notation open Ppextend open Reserve open Syntax_def open Constrexpr open Constrexpr_ops open Notation_term open Notation_ops open Prettyp open Search open Evar_refiner open Goal open Logic open Pfedit open Proof open Proof_using open Proof_global open Proof_type open Redexpr open Refiner open Tacmach open Tactic_debug open Hints open Auto open Autorewrite open Contradiction open Eauto open Elim open Equality open Evar_tactics open Extraargs open Extratactics open Hipattern open Inv open Leminv open Tacsubst open Tacintern open Tacinterp open Tacticals open Tactics open Eqschemes open ExplainErr open Class open ComDefinition open Indschemes open Ind_tables open Auto_ind_decl open Coqinit open Coqtop open Discharge open Himsg open Metasyntax open Mltop open Record open Coqloop open Vernacentries open Vernacinterp open Vernac (* Various utilities *) let qid = Libnames.qualid_of_string;; (* parsing of terms *) let parse_constr = Pcoq.parse_string Pcoq.Constr.constr;; let parse_vernac = Pcoq.parse_string Pcoq.Vernac_.vernac_control;; let parse_tac = Pcoq.parse_string Ltac_plugin.Pltac.tactic;; (* build a term of type glob_constr without type-checking or resolution of implicit syntax *) let e s = Constrintern.intern_constr (Global.env()) (parse_constr s);; (* build a term of type constr with type-checking and resolution of implicit syntax *) let constr_of_string s = Constrintern.interp_constr (Global.env()) Evd.empty (parse_constr s);; (* get the body of a constant *) open Declarations;; open Declareops;; let constbody_of_string s = let b = Global.lookup_constant (Nametab.locate_constant (qualid_of_string s)) in Option.get (Global.body_of_constant_body b);; (* Get the current goal *) (* let getgoal x = top_goal_of_pftreestate (Pfedit.get_pftreestate x);; let get_nth_goal n = nth_goal_of_pftreestate n (Pfedit.get_pftreestate ());; let current_goal () = get_nth_goal 1;; *) let pf_e gl s = Constrintern.interp_constr (pf_env gl) (project gl) (parse_constr s);; (* Set usual printing since the global env is available from the tracer *) let _ = Flags.in_debugger := false let _ = Flags.in_toplevel := true let _ = Constrextern.set_extern_reference (fun ?loc _ r -> Libnames.Qualid (loc,Nametab.shortest_qualid_of_global Id.Set.empty r));; let go () = Coqloop.loop ~time:false ~state:Option.(get !Coqtop.drop_last_doc) let _ = print_string ("\n\tOcaml toplevel with Coq printers and utilities (use go();; to exit)\n\n"); flush_all()