X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=components%2Ftactics%2FmetadataQuery.ml;h=246df0838ab36706b112b72659b7f0ea86d1e9bb;hb=dcd7c1a413c38bce8fc80198d660fd4dba4094e9;hp=0dc19582a329261b1d8e43e0b20a0c017b0d6646;hpb=959b04de5aac3ce6994a468cda20b0c198ebe579;p=helm.git diff --git a/components/tactics/metadataQuery.ml b/components/tactics/metadataQuery.ml index 0dc19582a..246df0838 100644 --- a/components/tactics/metadataQuery.ml +++ b/components/tactics/metadataQuery.ml @@ -192,7 +192,26 @@ let cmatch' = *) let apply_tac_verbose = PrimitiveTactics.apply_tac_verbose let cmatch' = Constr.cmatch' - + +(* used only by te old auto *) +let signature_of_goal ~(dbd:HMysql.dbd) ((proof, goal) as _status) = + let (_, metasenv, _, _) = proof in + let (_, context, ty) = CicUtil.lookup_meta goal metasenv in + let main, sig_constants = Constr.signature_of ty in + let set = signature_of_hypothesis context metasenv in + let set = + match main with + None -> set + | Some (main,l) -> + List.fold_right Constr.UriManagerSet.add (main::l) set in + let set = Constr.UriManagerSet.union set sig_constants in + let all_constants_closed = close_with_types set metasenv context in + let uris = + sigmatch ~dbd ~facts:false ~where:`Statement (None,all_constants_closed) in + let uris = List.filter nonvar (List.map snd uris) in + let uris = List.filter Hashtbl_equiv.not_a_duplicate uris in + uris + let is_predicate u = let ty, _ = try CicTypeChecker.type_of_aux' [] [] @@ -207,6 +226,19 @@ let is_predicate u = check_last_pi ty ;; +let only constants uri = + prerr_endline (UriManager.string_of_uri uri); + let t = CicUtil.term_of_uri uri in (* FIXME: write ty_of_term *) + let ty,_ = CicTypeChecker.type_of_aux' [] [] t CicUniv.empty_ugraph in + let consts = Constr.constants_of ty in +(* prerr_endline ("XXX " ^ UriManager.string_of_uri uri);*) +(* Constr.UriManagerSet.iter (fun u -> prerr_endline (" - " ^*) +(* UriManager.string_of_uri u)) consts;*) +(* Constr.UriManagerSet.iter (fun u -> prerr_endline (" + " ^*) +(* UriManager.string_of_uri u)) constants;*) + Constr.UriManagerSet.subset consts constants +;; + let universe_of_goals ~(dbd:HMysql.dbd) proof goals = let (_, metasenv, _, _) = proof in let add_uris_for acc goal = @@ -228,6 +260,7 @@ let universe_of_goals ~(dbd:HMysql.dbd) proof goals = let predicates, rest = Constr.UriManagerSet.partition is_predicate all_constants_closed in + prerr_endline ("FOO!1"); let uris = Constr.UriManagerSet.fold (fun u acc -> @@ -238,6 +271,7 @@ let universe_of_goals ~(dbd:HMysql.dbd) proof goals = acc @ uris) predicates [] in + prerr_endline ("FOO!2"); (* let uris = sigmatch ~dbd ~facts:false ~where:`Statement (None,all_constants_closed) @@ -245,6 +279,7 @@ let universe_of_goals ~(dbd:HMysql.dbd) proof goals = *) let uris = List.filter nonvar (List.map snd uris) in let uris = List.filter Hashtbl_equiv.not_a_duplicate uris in + let uris = List.filter (only all_constants_closed) uris in uris ;; @@ -253,13 +288,15 @@ let filter_out_predicate set ctx menv = ;; let equations_for_goal ~(dbd:HMysql.dbd) ?signature ((proof, goal) as _status) = -(* let to_string set = - "{ " ^ - (String.concat ", " +(* + let to_string set = + "{\n" ^ + (String.concat "\n" (Constr.UriManagerSet.fold - (fun u l -> (UriManager.string_of_uri u)::l) set [])) - ^ " }" - in *) + (fun u l -> (" "^UriManager.string_of_uri u)::l) set [])) + ^ "\n}" + in +*) let (_, metasenv, _, _) = proof in let (_, context, ty) = CicUtil.lookup_meta goal metasenv in let main, sig_constants = @@ -297,11 +334,13 @@ let equations_for_goal ~(dbd:HMysql.dbd) ?signature ((proof, goal) as _status) = (* Printf.printf "\ndopo close_with_types: %s\n\n" (to_string set); *) let set = close_with_constructors set metasenv context in (* Printf.printf "\ndopo close_with_constructors: %s\n\n" (to_string set); *) - let set = List.fold_right Constr.UriManagerSet.remove l set in + let set_for_sigmatch = List.fold_right Constr.UriManagerSet.remove l set in let uris = - sigmatch ~dbd ~facts:false ~where:`Statement (main,set) in + sigmatch ~dbd ~facts:false ~where:`Statement (main,set_for_sigmatch) in let uris = List.filter nonvar (List.map snd uris) in let uris = List.filter Hashtbl_equiv.not_a_duplicate uris in + let set = List.fold_right Constr.UriManagerSet.add l set in + let uris = List.filter (only set) uris in uris (* ) *) (* else raise Goal_is_not_an_equation *)