X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaEngine.ml;h=24872ffd0c408ceffdb163eb58499baa125946c8;hb=b9af9f1c0de6a1735b492f5c793a87a8fce218cc;hp=fe9ea94d66b3ba1dafab5310c035217dcb5f164a;hpb=ee69e02cdf70e8fed61c3bf1c8f165b4798ad9fb;p=helm.git diff --git a/helm/matita/matitaEngine.ml b/helm/matita/matitaEngine.ml index fe9ea94d6..24872ffd0 100644 --- a/helm/matita/matitaEngine.ml +++ b/helm/matita/matitaEngine.ml @@ -27,7 +27,8 @@ open Printf open MatitaTypes exception Drop;; -exception UnableToInclude of string;; +exception UnableToInclude of string +exception IncludedFileNotCompiled of string let debug = false ;; let debug_print = if debug then prerr_endline else ignore ;; @@ -96,6 +97,7 @@ let tactic_of_ast = function | `Normalize -> CicReduction.normalize ~delta:false ~subst:[] | `Reduce -> ProofEngineReduction.reduce | `Simpl -> ProofEngineReduction.simpl + | `Unfold what -> ProofEngineReduction.unfold ?what | `Whd -> CicReduction.whd ~delta:false ~subst:[] in Tactics.fold ~reduction ~term ~pattern @@ -124,6 +126,7 @@ let tactic_of_ast = function | `Normalize -> Tactics.normalize ~pattern | `Reduce -> Tactics.reduce ~pattern | `Simpl -> Tactics.simpl ~pattern + | `Unfold what -> Tactics.unfold ~pattern what | `Whd -> Tactics.whd ~pattern) | GrafiteAst.Reflexivity _ -> Tactics.reflexivity | GrafiteAst.Replace (_, pattern, with_what) -> @@ -170,6 +173,16 @@ let disambiguate_pattern status (wanted, hyp_paths, goal_path) = status, Some wanted in status, (wanted, hyp_paths ,goal_path) + +let disambiguate_reduction_kind status = function + | `Unfold (Some t) -> + let status, t = disambiguate_term status t in + status, `Unfold (Some t) + | `Normalize + | `Reduce + | `Simpl + | `Unfold None + | `Whd as kind -> status, kind let disambiguate_tactic status = function | GrafiteAst.Apply (loc, term) -> @@ -232,10 +245,11 @@ let disambiguate_tactic status = function status, GrafiteAst.ElimType (loc, what, None, depth, idents) | GrafiteAst.Exists loc -> status, GrafiteAst.Exists loc | GrafiteAst.Fail loc -> status,GrafiteAst.Fail loc - | GrafiteAst.Fold (loc,reduction_kind, term, pattern) -> + | GrafiteAst.Fold (loc,red_kind, term, pattern) -> let status, pattern = disambiguate_pattern status pattern in let status, term = disambiguate_term status term in - status, GrafiteAst.Fold (loc,reduction_kind, term, pattern) + let status, red_kind = disambiguate_reduction_kind status red_kind in + status, GrafiteAst.Fold (loc,red_kind, term, pattern) | GrafiteAst.FwdSimpl (loc, hyp, names) -> status, GrafiteAst.FwdSimpl (loc, hyp, names) | GrafiteAst.Fourier loc -> status, GrafiteAst.Fourier loc @@ -261,9 +275,10 @@ let disambiguate_tactic status = function | GrafiteAst.LetIn (loc, term, name) -> let status, term = disambiguate_term status term in status, GrafiteAst.LetIn (loc,term,name) - | GrafiteAst.Reduce (loc, reduction_kind, pattern) -> + | GrafiteAst.Reduce (loc, red_kind, pattern) -> let status, pattern = disambiguate_pattern status pattern in - status, GrafiteAst.Reduce(loc, reduction_kind, pattern) + let status, red_kind = disambiguate_reduction_kind status red_kind in + status, GrafiteAst.Reduce(loc, red_kind, pattern) | GrafiteAst.Reflexivity loc -> status, GrafiteAst.Reflexivity loc | GrafiteAst.Replace (loc, pattern, with_what) -> let status, pattern = disambiguate_pattern status pattern in @@ -503,18 +518,19 @@ let disambiguate_command status = function status, GrafiteAst.Obj (loc,obj) let make_absolute paths path = - let rec aux = function - | [] -> ignore (Unix.stat path); path - | p :: tl -> - let path = p ^ "/" ^ path in - try - ignore (Unix.stat path); path - with Unix.Unix_error _ -> aux tl - in - try - aux paths - with Unix.Unix_error _ as exc -> - command_error ("File " ^ path ^ " not found") + if path = "coq.ma" then path + else + let rec aux = function + | [] -> ignore (Unix.stat path); path + | p :: tl -> + let path = p ^ "/" ^ path in + try + ignore (Unix.stat path); path + with Unix.Unix_error _ -> aux tl + in + try + aux paths + with Unix.Unix_error _ as exc -> raise (UnableToInclude path) ;; let eval_command opts status cmd = @@ -532,7 +548,8 @@ let eval_command opts status cmd = let absolute_path = make_absolute opts.include_paths path in let moopath = MatitaMisc.obj_file_of_script absolute_path in let ic = - try open_in moopath with Sys_error _ -> raise (UnableToInclude moopath) in + try open_in moopath with Sys_error _ -> + raise (IncludedFileNotCompiled moopath) in let stream = Stream.of_channel ic in let status = ref status in !eval_from_stream_ref status stream (fun _ _ -> ());