X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FgTopLevel%2FgTopLevel.ml;h=da00761f932f2aa7842149c940e3fcd576839ee4;hb=86ec68f575f6f781572d14d0aba9a98a860c94a6;hp=26c0b2e65c427c16f9001a57db91c40d4b73c4fd;hpb=b7e39b3d2f611c716669fb8b36c0eba3cb66cc29;p=helm.git diff --git a/helm/gTopLevel/gTopLevel.ml b/helm/gTopLevel/gTopLevel.ml index 26c0b2e65..da00761f9 100644 --- a/helm/gTopLevel/gTopLevel.ml +++ b/helm/gTopLevel/gTopLevel.ml @@ -1,4 +1,4 @@ -(* Copyright (C) 2000, HELM Team. +(* Copyright (C) 2000-2002, HELM Team. * * This file is part of HELM, an Hypertextual, Electronic * Library of Mathematics, developed at the Computer Science @@ -47,6 +47,10 @@ let htmlfooter = "" ;; +let prooffile = "/public/sacerdot/currentproof";; +(*CSC: the getter should handle the innertypes, not the FS *) +let innertypesfile = "/public/sacerdot/innertypes";; + (* GLOBAL REFERENCES (USED BY CALLBACKS) *) let htmlheader_and_content = ref htmlheader;; @@ -55,6 +59,17 @@ let current_cic_infos = ref None;; let current_goal_infos = ref None;; let current_scratch_infos = ref None;; +(* COMMAND LINE OPTIONS *) + +let usedb = ref true + +let argspec = + [ + "-nodb", Arg.Clear usedb, "disable use of MathQL DB" + ] +in +Arg.parse argspec ignore "" + (* MISC FUNCTIONS *) @@ -141,17 +156,17 @@ let applyStylesheets input styles args = let mml_of_cic_object uri annobj ids_to_inner_sorts ids_to_inner_types = let xml = - Cic2Xml.print_object uri ids_to_inner_sorts annobj + Cic2Xml.print_object uri ~ids_to_inner_sorts annobj in let xmlinnertypes = - Cic2Xml.print_inner_types uri ids_to_inner_sorts - ids_to_inner_types + Cic2Xml.print_inner_types uri ~ids_to_inner_sorts + ~ids_to_inner_types in let input = Xml2Gdome.document_of_xml domImpl xml in (*CSC: We save the innertypes to disk so that we can retrieve them in the *) (*CSC: stylesheet. This DOES NOT work when UWOBO and/or the getter are not *) (*CSC: local. *) - Xml.pp xmlinnertypes (Some "/public/sacerdot/innertypes") ; + Xml.pp xmlinnertypes (Some innertypesfile) ; let output = applyStylesheets input mml_styles mml_args in output ;; @@ -233,7 +248,7 @@ prerr_endline ("Offending sequent: " ^ SequentPp.TextualPp.print_sequent current (* ignore(domImpl#saveDocumentToFile ~doc:sequent_doc - ~name:"/public/sacerdot/guruguru1" ~indent:true ()) ; + ~name:"/home/galata/miohelm/guruguru1" ~indent:true ()) ; *) let mml_of_cic_term metano term = @@ -326,10 +341,10 @@ let call_tactic_with_input tactic rendering_window () = None -> assert false | Some (curi,_,_,_) -> curi in - let metasenv = + let uri,metasenv,bo,ty = match !ProofEngine.proof with None -> assert false - | Some (_,metasenv,_,_) -> metasenv + | Some (uri,metasenv,bo,ty) -> uri,metasenv,bo,ty in let context = List.map @@ -348,10 +363,12 @@ let call_tactic_with_input tactic rendering_window () = try while true do match - CicTextualParserContext.main curi context CicTextualLexer.token lexbuf + CicTextualParserContext.main + curi context metasenv CicTextualLexer.token lexbuf with None -> () - | Some expr -> + | Some (metasenv',expr) -> + ProofEngine.proof := Some (uri,metasenv',bo,ty) ; tactic expr ; refresh_sequent proofw ; refresh_proof output @@ -466,10 +483,10 @@ let call_tactic_with_input_and_goal_input tactic rendering_window () = None -> assert false | Some (curi,_,_,_) -> curi in - let metasenv = + let uri,metasenv,bo,ty = match !ProofEngine.proof with None -> assert false - | Some (_,metasenv,_,_) -> metasenv + | Some (uri,metasenv,bo,ty) -> uri,metasenv,bo,ty in let context = List.map @@ -489,11 +506,12 @@ let call_tactic_with_input_and_goal_input tactic rendering_window () = try while true do match - CicTextualParserContext.main curi context + CicTextualParserContext.main curi context metasenv CicTextualLexer.token lexbuf with None -> () - | Some expr -> + | Some (metasenv',expr) -> + ProofEngine.proof := Some (uri,metasenv',bo,ty) ; tactic ~goal_input:(Hashtbl.find ids_to_terms id) ~input:expr ; refresh_sequent proofw ; @@ -632,6 +650,9 @@ let apply rendering_window = let elimintrossimpl rendering_window = call_tactic_with_input ProofEngine.elim_intros_simpl rendering_window ;; +let elimtype rendering_window = + call_tactic_with_input ProofEngine.elim_type rendering_window +;; let whd rendering_window = call_tactic_with_goal_input ProofEngine.whd rendering_window ;; @@ -653,6 +674,7 @@ let change rendering_window = let letin rendering_window = call_tactic_with_input ProofEngine.letin rendering_window ;; +let ring rendering_window = call_tactic ProofEngine.ring rendering_window;; let clearbody rendering_window = call_tactic_with_hypothesis_input ProofEngine.clearbody rendering_window ;; @@ -660,6 +682,8 @@ let clear rendering_window = call_tactic_with_hypothesis_input ProofEngine.clear rendering_window ;; +let fourier rendering_window = call_tactic ProofEngine.fourier rendering_window;; + let whd_in_scratch scratch_window = call_tactic_with_goal_input_in_scratch ProofEngine.whd_in_scratch @@ -730,7 +754,7 @@ let save rendering_window () = let (acurrentproof,_,_,ids_to_inner_sorts,_,_,_) = Cic2acic.acic_object_of_cic_object currentproof in - let xml = Cic2Xml.print_object uri ids_to_inner_sorts acurrentproof in + let xml = Cic2Xml.print_object uri ~ids_to_inner_sorts acurrentproof in let xml' = [< Xml.xml_cdata "\n" ; Xml.xml_cdata @@ -738,10 +762,18 @@ let save rendering_window () = xml >] in - Xml.pp ~quiet:true xml' (Some "/public/sacerdot/currentproof") ; + Xml.pp ~quiet:true xml' (Some prooffile) ; output_html outputhtml ("

Current proof saved to " ^ - "/public/sacerdot/currentproof

") + prooffile ^ "") +;; + +(* Used to typecheck the loaded proofs *) +let typecheck_loaded_proof metasenv bo ty = + let module T = CicTypeChecker in + (*CSC: bisogna controllare anche il metasenv!!! *) + ignore (T.type_of_aux' metasenv [] ty) ; + ignore (T.type_of_aux' metasenv [] bo) ;; let load rendering_window () = @@ -750,8 +782,9 @@ let load rendering_window () = let proofw = (rendering_window#proofw : GMathView.math_view) in try let uri = UriManager.uri_of_string "cic:/dummy.con" in - match CicParser.obj_of_xml "/public/sacerdot/currentproof" uri with + match CicParser.obj_of_xml prooffile uri with Cic.CurrentProof (_,metasenv,bo,ty) -> + typecheck_loaded_proof metasenv bo ty ; ProofEngine.proof := Some (uri, metasenv, bo, ty) ; ProofEngine.goal := @@ -763,7 +796,7 @@ let load rendering_window () = refresh_sequent proofw ; output_html outputhtml ("

Current proof loaded from " ^ - "/public/sacerdot/currentproof

") + prooffile ^ "") | _ -> assert false with RefreshSequentException e -> @@ -1030,13 +1063,13 @@ let check rendering_window scratch_window () = while true do (* Execute the actions *) match - CicTextualParserContext.main curi names_context CicTextualLexer.token - lexbuf + CicTextualParserContext.main curi names_context metasenv + CicTextualLexer.token lexbuf with None -> () - | Some expr -> + | Some (metasenv',expr) -> try - let ty = CicTypeChecker.type_of_aux' metasenv context expr in + let ty = CicTypeChecker.type_of_aux' metasenv' context expr in let mml = mml_of_cic_term 111 (Cic.Cast (expr,ty)) in scratch_window#show () ; scratch_window#mmlwidget#load_tree ~dom:mml @@ -1063,7 +1096,7 @@ let locate rendering_window () = | [] -> "" | head :: tail -> inputt#delete_text 0 inputlen; - Mquery.locate head + MQueryGenerator.locate_html head with e -> "

" ^ Printexc.to_string e ^ "

" ) @@ -1084,12 +1117,13 @@ let backward rendering_window () = match !ProofEngine.goal with | None -> "" | Some metano -> - let (_,_,ty) = + let (_, ey ,ty) = List.find (function (m,_,_) -> m=metano) metasenv in - Mquery.backward ty level + MQueryGenerator.backward metasenv ey ty level in output_html outputhtml result +;; let choose_selection (mmlwidget : GMathView.math_view) (element : Gdome.element option) @@ -1361,6 +1395,9 @@ class rendering_window output proofw (label : GMisc.label) = let elimintrossimplb = GButton.button ~label:"ElimIntrosSimpl" ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in + let elimtypeb = + GButton.button ~label:"ElimType" + ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in let whdb = GButton.button ~label:"Whd" ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in @@ -1379,17 +1416,23 @@ class rendering_window output proofw (label : GMisc.label) = let changeb = GButton.button ~label:"Change" ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let letinb = - GButton.button ~label:"Let ... In" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in let hbox4 = GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in + let letinb = + GButton.button ~label:"Let ... In" + ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in + let ringb = + GButton.button ~label:"Ring" + ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in let clearbodyb = GButton.button ~label:"ClearBody" ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in let clearb = GButton.button ~label:"Clear" ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in + let fourierb = + GButton.button ~label:"Fourier" + ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in let outputhtml = GHtml.xmhtml ~source:"" @@ -1432,6 +1475,7 @@ object(self) ignore(exactb#connect#clicked (exact self)) ; ignore(applyb#connect#clicked (apply self)) ; ignore(elimintrossimplb#connect#clicked (elimintrossimpl self)) ; + ignore(elimtypeb#connect#clicked (elimtype self)) ; ignore(whdb#connect#clicked (whd self)) ; ignore(reduceb#connect#clicked (reduce self)) ; ignore(simplb#connect#clicked (simpl self)) ; @@ -1439,8 +1483,10 @@ object(self) ignore(cutb#connect#clicked (cut self)) ; ignore(changeb#connect#clicked (change self)) ; ignore(letinb#connect#clicked (letin self)) ; + ignore(ringb#connect#clicked (ring self)) ; ignore(clearbodyb#connect#clicked (clearbody self)) ; ignore(clearb#connect#clicked (clear self)) ; + ignore(fourierb#connect#clicked (fourier self)) ; ignore(introsb#connect#clicked (intros self)) ; Logger.log_callback := (Logger.log_to_html ~print_and_flush:(output_html outputhtml)) @@ -1462,8 +1508,36 @@ let initialize_everything () = let _ = CicCooking.init () ; - Mquery.init () ; + if !usedb then + begin + MQueryGenerator.init () ; + CicTextualParser0.set_locate_object + (function id -> + let MathQL.MQRefs uris = MQueryGenerator.locate id in + let uri = + match uris with + [] -> None + | [uri] -> Some uri + | _ -> None (* here we must let the user choose one uri *) + in + match uri with + Some uri' -> + if String.sub uri' (String.length uri' - 4) 4 = ".con" then +(*CSC: what cooking number? Here I always use 0, which may be bugged *) + Some (Cic.Const (UriManager.uri_of_string uri',0)) + else + let uri'',typeno = +(*CSC: the locate query now looks only for inductive type blocks ;-( *) +(*CSC: when it will be correctly implemented we will have to work *) +(*CSC: here on the fragment identifier *) + uri',0 + in +(*CSC: what cooking number? Here I always use 0, which may be bugged *) + Some (Cic.MutInd (UriManager.uri_of_string uri'',0,typeno)) + | None -> None + ) + end ; ignore (GtkMain.Main.init ()) ; initialize_everything () ; - Mquery.close () + if !usedb then MQueryGenerator.close (); ;;