X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2FgTopLevel%2FtopLevel%2FtopLevel.ml;h=7736c1a29404b17ea0f194e0c5e0250d74cccf97;hb=86ec68f575f6f781572d14d0aba9a98a860c94a6;hp=21663939990419ee98e69990c5f63849a678c1af;hpb=dec50888f98015c937283acc14e2ffceccc04a11;p=helm.git diff --git a/helm/gTopLevel/topLevel/topLevel.ml b/helm/gTopLevel/topLevel/topLevel.ml index 216639399..7736c1a29 100644 --- a/helm/gTopLevel/topLevel/topLevel.ml +++ b/helm/gTopLevel/topLevel/topLevel.ml @@ -3,16 +3,32 @@ let get_terms () = let lexbuf = Lexing.from_channel stdin in try while true do - match CicTextualParser.main CicTextualLexer.token lexbuf with - | None -> () - | Some expr -> terms := expr :: ! terms + match CicTextualParserContext.main + (UriManager.uri_of_string "cic:/dummy") [] [] + CicTextualLexer.token lexbuf + with + | None -> () + | Some (_, expr) -> terms := expr :: ! terms done; ! terms with CicTextualParser0.Eof -> ! terms +let pp_type_of uri = + let u = UriManager.uri_of_string uri in + let s = match (CicEnvironment.get_obj u) with + | Cic.Definition (_, _, ty, _) -> CicPp.ppterm ty + | Cic.Axiom (_, ty, _) -> CicPp.ppterm ty + | Cic.Variable (_, _, ty) -> CicPp.ppterm ty + | _ -> "Current proof or inductive definition." +(* + | Cic.CurrentProof (_,conjs,te,ty) -> + | C.InductiveDefinition _ -> +*) + in print_endline s; flush stdout + let locate name = - print_endline (MQueryGenerator.locate name); + print_endline (MQueryGenerator.locate_html name); flush stdout let rec display = function @@ -22,44 +38,64 @@ let rec display = function print_endline ("? " ^ CicPp.ppterm term ^ "

"); flush stdout -let rec levels level = function +let rec levels = function | [] -> () | term :: tail -> - levels level tail; + levels tail; print_endline ("? " ^ CicPp.ppterm term ^ "

"); - print_endline (MQueryGenerator.levels [] [] term level); + print_endline (MQueryGenerator.levels [] [] term); flush stdout -let rec backward level = function - | [] -> () - | term :: tail -> - backward level tail; - print_endline ("? " ^ CicPp.ppterm term ^ "

"); - print_endline (MQueryGenerator.backward [] [] term level); - flush stdout - +let mbackward n m l = + let queries = ref [] in + let issue query = + if List.mem query ! queries then false + else begin queries := query :: ! queries; true end + in + let rec backward level = function + | [] -> () + | term :: tail -> + backward level tail; + print_endline ("? " ^ CicPp.ppterm term ^ "

"); + print_endline (MQueryGenerator.backward [] [] term level); + flush stdout + in + MQueryGenerator.call_back issue; + for level = max m n downto min m n do + prerr_endline ("toplevel: backward: trying level " ^ + string_of_int level); + backward level l + done; + prerr_endline ("toplevel: backward: " ^ + string_of_int (List.length ! queries) ^ + " queries issued"); + MQueryGenerator.call_back (fun _ -> true) + let parse_args () = let rec parse = function | [] -> () - | ("-l"|"-locate") :: arg :: rem -> - locate arg; parse rem - | ("-d"|"-display") :: rem -> - display (get_terms ()) - | ("-t"|"-test") :: arg :: rem -> - levels (int_of_string arg) (get_terms ()) - | ("-b"|"-backward") :: arg :: rem -> - backward (int_of_string arg) (get_terms ()) + | ("-d"|"-display") :: rem -> display (get_terms ()) + | ("-t"|"-typeof") :: arg :: rem -> pp_type_of arg; parse rem + | ("-l"|"-levels") :: rem -> levels (get_terms ()) + | ("-L"|"-locate") :: arg :: rem -> locate arg; parse rem + | ("-B"|"-backward") :: arg :: rem -> + let m = (int_of_string arg) in + mbackward m m (get_terms ()) + | ("-MB"|"-mbackward") :: arg :: rem -> + let m = (int_of_string arg) in + mbackward m 0 (get_terms ()) | _ :: rem -> parse rem in parse (List.tl (Array.to_list Sys.argv)) let _ = - CicCooking.init () ; + CicCooking.init () ; Logger.log_callback := (Logger.log_to_html ~print_and_flush:(function s -> print_string s ; flush stdout)) ; MQueryGenerator.init (); parse_args (); MQueryGenerator.close (); + prerr_endline ("toplevel: done in " ^ string_of_float (Sys.time ()) ^ + " seconds"); exit 0 -;;