From 870075f34dd9fa5792bfbf413afd3b96f17e76a0 Mon Sep 17 00:00:00 2001 From: Stephane Glondu Date: Fri, 8 Aug 2008 13:18:42 +0200 Subject: Imported Upstream version 8.2~beta4+dfsg --- toplevel/minicoq.ml | 149 ---------------------------------------------------- 1 file changed, 149 deletions(-) delete mode 100644 toplevel/minicoq.ml (limited to 'toplevel/minicoq.ml') diff --git a/toplevel/minicoq.ml b/toplevel/minicoq.ml deleted file mode 100644 index e688d50e..00000000 --- a/toplevel/minicoq.ml +++ /dev/null @@ -1,149 +0,0 @@ -(************************************************************************) -(* v * The Coq Proof Assistant / The Coq Development Team *) -(* (id, make_path [] id CCI)) - (named_context !env) - -let lookup_named id = - let rec look n = function - | [] -> mkVar id - | (Name id')::_ when id = id' -> mkRel n - | _::r -> look (succ n) r - in - look 1 - -let args sign = Array.of_list (instance_from_section_context sign) - -let rec globalize bv c = match kind_of_term c with - | Var id -> lookup_named id bv - | Const (sp, _) -> - let cb = lookup_constant sp !env in mkConst (sp, args cb.const_hyps) - | Ind (sp,_ as spi, _) -> - let mib = lookup_mind sp !env in mkMutInd (spi, args mib.mind_hyps) - | Construct ((sp,_),_ as spc, _) -> - let mib = lookup_mind sp !env in mkMutConstruct (spc, args mib.mind_hyps) - | _ -> map_constr_with_named_binders (fun na l -> na::l) globalize bv c - -let check c = - let c = globalize [] c in - let (j,u) = safe_infer !env c in - let ty = j_type j in - let pty = pr_term CCI (env_of_safe_env !env) ty in - mSGNL (hov 0 (str" :" ++ spc () ++ hov 0 pty ++ fnl ())) - -let definition id ty c = - let c = globalize [] c in - let ty = Option.map (globalize []) ty in - let ce = { const_entry_body = c; const_entry_type = ty } in - let sp = make_path [] id CCI in - env := add_constant sp ce (locals()) !env; - mSGNL (hov 0 (pr_id id ++ spc () ++ str"is defined" ++ fnl ())) - -let parameter id t = - let t = globalize [] t in - let sp = make_path [] id CCI in - env := add_parameter sp t (locals()) !env; - mSGNL (hov 0 (str"parameter" ++ spc () ++ pr_id id ++ - spc () ++ str"is declared" ++ fnl ())) - -let variable id t = - let t = globalize [] t in - env := push_named_assum (id,t) !env; - mSGNL (hov 0 (str"variable" ++ spc () ++ pr_id id ++ - spc () ++ str"is declared" ++ fnl ())) - -let inductive par inds = - let nparams = List.length par in - let bvpar = List.rev (List.map (fun (id,_) -> Name id) par) in - let name_inds = List.map (fun (id,_,_) -> Name id) inds in - let bv = bvpar @ List.rev name_inds in - let npar = List.map (fun (id,c) -> (Name id, globalize [] c)) par in - let one_inductive (id,ar,cl) = - let cv = List.map (fun (_,c) -> prod_it (globalize bv c) npar) cl in - { mind_entry_nparams = nparams; - mind_entry_params = List.map (fun (id,c) -> (id, LocalAssum c)) par; - mind_entry_typename = id; - mind_entry_arity = prod_it (globalize bvpar ar) npar; - mind_entry_consnames = List.map fst cl; - mind_entry_lc = cv } - in - let inds = List.map one_inductive inds in - let mie = { - mind_entry_finite = true; - mind_entry_inds = inds } - in - let sp = - let mi1 = List.hd inds in - make_path [] mi1.mind_entry_typename CCI in - env := add_mind sp mie (locals()) !env; - mSGNL (hov 0 (str"inductive type(s) are declared" ++ fnl ())) - - -let execute = function - | Check c -> check c - | Definition (id, ty, c) -> definition id ty c - | Parameter (id, t) -> parameter id t - | Variable (id, t) -> variable id t - | Inductive (par,inds) -> inductive par inds - -let parse_file f = - let c = open_in f in - let cs = Stream.of_channel c in - try - while true do - let c = Grammar.Entry.parse command cs in execute c - done - with - | End_of_file | Stdpp.Exc_located (_, End_of_file) -> close_in c; exit 0 - | exn -> close_in c; raise exn - -module Explain = Fhimsg.Make(struct let pr_term = pr_term end) - -let rec explain_exn = function - | TypeError (k,ctx,te) -> - mSGNL (hov 0 (str "type error:" ++ spc () ++ - Explain.explain_type_error k ctx te ++ fnl ())) - | Stdpp.Exc_located (_,exn) -> - explain_exn exn - | exn -> - mSGNL (hov 0 (str"error: " ++ str (Printexc.to_string exn) ++ fnl ())) - -let top () = - let cs = Stream.of_channel stdin in - while true do - try - let c = Grammar.Entry.parse command cs in execute c - with - | End_of_file | Stdpp.Exc_located (_, End_of_file) -> exit 0 - | exn -> explain_exn exn - done - -let main () = - if Array.length Sys.argv = 1 then - parse_file "test" - else - if Sys.argv.(1) = "-top" then top () else parse_file (Sys.argv.(1)) - -let _ = Printexc.print main () - -- cgit v1.2.3