X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Ftactics%2FmetadataQuery.ml;h=0dc19582a329261b1d8e43e0b20a0c017b0d6646;hb=d78fbf3cface8f01d11f385757cbf47ae1866326;hp=a5c387971736f486004323b1d6bb729aa612a3c6;hpb=437246a8e84268383a2f53f76442d811af3e8056;p=helm.git diff --git a/helm/software/components/tactics/metadataQuery.ml b/helm/software/components/tactics/metadataQuery.ml index a5c387971..0dc19582a 100644 --- a/helm/software/components/tactics/metadataQuery.ml +++ b/helm/software/components/tactics/metadataQuery.ml @@ -57,6 +57,7 @@ let signature_of_hypothesis context metasenv = CicTypeChecker.type_of_aux' metasenv current_ctx ty CicUniv.empty_ugraph in + let set = Constr.UriManagerSet.union set(Constr.constants_of ty)in match sort with | Cic.Sort Cic.Prop -> set, hyp::current_ctx | _ -> Constr.UriManagerSet.union set (Constr.constants_of t), @@ -191,31 +192,11 @@ let cmatch' = *) let apply_tac_verbose = PrimitiveTactics.apply_tac_verbose let cmatch' = Constr.cmatch' - -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 filter_predicate set ctx menv = - let is_predicate t = + +let is_predicate u = let ty, _ = try CicTypeChecker.type_of_aux' [] [] - (CicUtil.term_of_uri t) CicUniv.empty_ugraph + (CicUtil.term_of_uri u) CicUniv.empty_ugraph with CicTypeChecker.TypeCheckerFailure _ -> assert false in let rec check_last_pi = function @@ -223,9 +204,52 @@ let filter_predicate set ctx menv = | Cic.Sort Cic.Prop -> true | _ -> false in - not (check_last_pi ty) + check_last_pi ty +;; + +let universe_of_goals ~(dbd:HMysql.dbd) proof goals = + let (_, metasenv, _, _) = proof in + let add_uris_for acc goal = + 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 + Constr.UriManagerSet.union all_constants_closed acc + in + let all_constants_closed = + List.fold_left add_uris_for Constr.UriManagerSet.empty goals in + (* we split predicates from the rest *) + let predicates, rest = + Constr.UriManagerSet.partition is_predicate all_constants_closed + in + let uris = + Constr.UriManagerSet.fold + (fun u acc -> + let uris = + sigmatch ~dbd ~facts:false ~where:`Statement + (Some (u,[]),all_constants_closed) + in + acc @ uris) + predicates [] + in +(* + let uris = + sigmatch ~dbd ~facts:false ~where:`Statement (None,all_constants_closed) in - Constr.UriManagerSet.filter is_predicate set +*) + let uris = List.filter nonvar (List.map snd uris) in + let uris = List.filter Hashtbl_equiv.not_a_duplicate uris in + uris +;; + +let filter_out_predicate set ctx menv = + Constr.UriManagerSet.filter (fun u -> not (is_predicate u)) set ;; let equations_for_goal ~(dbd:HMysql.dbd) ?signature ((proof, goal) as _status) = @@ -268,7 +292,7 @@ let equations_for_goal ~(dbd:HMysql.dbd) ?signature ((proof, goal) as _status) = let set = signature_of_hypothesis context metasenv in (* Printf.printf "\nsignature_of_hypothesis: %s\n\n" (to_string set); *) let set = Constr.UriManagerSet.union set sig_constants in - let set = filter_predicate set context metasenv in + let set = filter_out_predicate set context metasenv in let set = close_with_types set metasenv context in (* Printf.printf "\ndopo close_with_types: %s\n\n" (to_string set); *) let set = close_with_constructors set metasenv context in