]> matita.cs.unibo.it Git - helm.git/commitdiff
* auto_tac removed (it can be found in CVS)
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Mon, 27 Jun 2005 12:24:13 +0000 (12:24 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Mon, 27 Jun 2005 12:24:13 +0000 (12:24 +0000)
* auto_tac_new renamed to auto_tac
* TacticAst.Auto ported to auto_tac[_new] (i.e. width added)
* MetadataQuery.hint removed (only {new_,}experimental_hint were used)

helm/ocaml/tactics/autoTactic.ml
helm/ocaml/tactics/autoTactic.mli
helm/ocaml/tactics/metadataQuery.ml
helm/ocaml/tactics/metadataQuery.mli
helm/ocaml/tactics/tactics.ml
helm/ocaml/tactics/tactics.mli

index ea29499a4b198ffaf95f326b4d578e1aa1e31202..d0a44c561057b3d0a0b51dad25a7c5e31f602402 100644 (file)
@@ -32,137 +32,11 @@ let new_experimental_hint =
  fun ~dbd ~facts ?signature ~universe status ->
   profile (MetadataQuery.new_experimental_hint ~dbd ~facts ?signature ~universe) status
 
-let search_theorems_in_context status =
-  let (proof, goal) = status in
-  let module C = Cic in
-  let module R = CicReduction in
-  let module S = CicSubstitution in
-  let module PET = ProofEngineTypes in 
-  let module PT = PrimitiveTactics in 
-  let _,metasenv,_,_ = proof in
-  let _,context,ty = CicUtil.lookup_meta goal metasenv in
-  let rec find n = function 
-      [] -> []
-    | hd::tl ->
-       let res =
-         try 
-            Some (PET.apply_tactic
-                   (PT.apply_tac ~term:(C.Rel n)) status ) 
-         with 
-           PET.Fail _ -> None in
-       (match res with
-         Some res -> res::(find (n+1) tl)
-       | None -> find (n+1) tl)
-  in
-  try 
-    find 1 context
-  with Failure s -> 
-    []
-;;     
-
-let depth = 5;;
-let width = 3;;
-
-let new_search_theorems f proof goal depth gtl sign =
-  let choices = f (proof,goal)
-  in 
-  List.map 
-    (function (proof, goallist) ->
-       (proof,(List.map (function g -> (g,depth)) goallist)@gtl, sign))
-    choices 
-;;
-
-exception NoOtherChoices;;
-let rec auto dbd = function
-    [] -> []
-  | (proof, [], sign)::tl -> (proof, [], sign)::tl
-  | (proof, (goal,0)::_, _)::tl -> auto dbd tl
-  | (proof, (((goal,depth)::gtl) as allg), sign)::tl -> 
-      (* first we check if the metavariable has not been already
-         closed as a side effect by some other application *)
-      let facts = (depth = 1) in 
-      let name,metasenv,p,statement = proof in
-      let meta_inf = 
-       (try 
-          let (_, ey ,ty) = CicUtil.lookup_meta goal metasenv in
-            Some (ey, ty)
-        with _ -> None) in
-      match meta_inf with
-         Some (ey, ty) ->
-            (* the goal is still there *)
-            (*
-           debug_print ("CURRENT GOAL = " ^ CicPp.ppterm ty);
-           debug_print ("CURRENT PROOF = " ^ CicPp.ppterm p);
-           debug_print ("CURRENT HYP = " ^ CicPp.ppcontext ey);
-            *)
-            (* if the goal contains metavariables we use the input
-               signature for at_most constraints *)
-            let is_meta_closed = CicUtil.is_meta_closed ty in
-           let sign, new_sign =
-             if is_meta_closed then
-               None, Some (MetadataConstraints.signature_of ty)
-             else sign,sign in (* maybe the union ? *)
-           let local_choices =
-             new_search_theorems 
-               search_theorems_in_context 
-               proof goal (depth-1) [] new_sign in
-           let global_choices =
-             new_search_theorems 
-               (fun status -> 
-                  List.map snd 
-                  (MetadataQuery.hint 
-                     ~dbd ~facts:facts ?signature:sign status))
-               proof goal (depth-1) [] new_sign in
-            (* we proceed depth-first on the current goal. This is
-               a MAJOR optimization, since in case of success, and
-               if the goal is meta_closed, we may just drop the alternatives
-              tl1, avoiding useless backtracking. *)
-           let all_choices =
-             local_choices@global_choices in
-             (match (auto dbd all_choices) 
-              with
-                  [] -> auto dbd tl
-                | (proof,[],_)::tl1 -> 
-                    let all_choices =
-                      let gtl' = List.map fst gtl in
-                        if (gtl = [] || is_meta_closed) then 
-                          (proof,gtl,sign)::tl
-                        else
-                          let tl2 = 
-                            (List.map 
-                               (function (p,l,s) -> (p,l@gtl,s)) tl1)
-                          in                    
-                            (proof,gtl,sign)::tl2@tl in
-                      auto dbd all_choices
-                | _ -> assert false)
-       | None -> auto dbd ((proof,gtl,sign)::tl) 
-;; 
-
-
-let auto_tac ?num dbd =
-  let auto_tac dbh (proof,goal) =
-  debug_print "Entro in Auto";
-  match (auto dbd [(proof, [(goal,depth)],None)]) with
-      [] ->  debug_print("Auto failed");
-       raise (ProofEngineTypes.Fail "No Applicable theorem")
-    | (proof,[],_)::_ ->  
-       debug_print "AUTO_TAC HA FINITO";
-       (proof,[])
-    | _ -> assert false
-  in
-  ProofEngineTypes.mk_tactic (auto_tac dbd)
-;;
-
-
-(************************** EXPERIMENTAL VERSION ****************************)
-
 (* In this versions of auto_tac we maintain an hash table of all inspected
    goals. We assume that the context is invariant for application. 
    To this aim, it is essential to sall hint_verbose, that in turns calls
    apply_verbose. *)
 
-
-
 type exitus = 
     No of int 
   | Yes of Cic.term * int 
@@ -396,7 +270,7 @@ and auto_new_aux dbd width already_seen_goals universe = function
 let default_depth = 5
 let default_width = 3
 
-let auto_tac_new ?(depth=default_depth) ?(width=default_width) ~(dbd:Mysql.dbd)
+let auto_tac ?(depth=default_depth) ?(width=default_width) ~(dbd:Mysql.dbd)
   ()
 =
   let auto_tac dbd (proof,goal) =
index 14627a4a336462c22bded04a8dc0e9cfbba08623..90f958e7ba0e0fa07ba4d6913ec074239df6a11d 100644 (file)
@@ -24,9 +24,6 @@
  * http://cs.unibo.it/helm/.
  *)
 
-val auto_tac : ?num:int option -> Mysql.dbd -> ProofEngineTypes.tactic
-
-val auto_tac_new:
+val auto_tac:
   ?depth:int -> ?width:int -> dbd:Mysql.dbd -> unit ->
     ProofEngineTypes.tactic
-
index fab96475cc93604bc0bcd1dc70a8ef82d1865a47..a3e774d1d84e46f7345392f81780cc212d229732 100644 (file)
@@ -176,65 +176,6 @@ let compare_goal_list proof goal1 goal2 =
   in
   prop1 - prop2
 
-let hint ~(dbd:Mysql.dbd) ?(facts=false) ?signature ((proof, goal) as status) =
-  let (_, metasenv, _, _) = proof in
-  let (_, context, ty) = CicUtil.lookup_meta goal metasenv in
-  let (uris, (main, sig_constants)) =
-    match signature with
-    | Some signature -> (Constr.sigmatch ~dbd ~facts signature, signature)
-    | None -> (Constr.cmatch' ~dbd ~facts ty, Constr.signature_of ty)
-  in
-  let uris = List.filter nonvar (List.map snd uris) in
-  let uris = List.filter Hashtbl_equiv.not_a_duplicate uris in
-  let types_constants =
-    match main with
-    | None -> Constr.UriManagerSet.empty
-    | Some (main, types) ->
-        List.fold_right Constr.UriManagerSet.add (main :: types)
-          Constr.UriManagerSet.empty
-  in
-  let hyp_constants =
-    Constr.UriManagerSet.diff (signature_of_hypothesis context) types_constants
-  in
-(* Constr.UriManagerSet.iter debug_print hyp_constants; *)
-  let other_constants = Constr.UriManagerSet.union sig_constants hyp_constants in
-  let uris = 
-    let pow = 2 ** (Constr.UriManagerSet.cardinal other_constants) in
-    if ((List.length uris < pow) or (pow <= 0))
-    then begin
-(*       debug_print "MetadataQuery: large sig, falling back to old method"; *)
-      filter_uris_forward ~dbd (main, other_constants) uris
-    end else
-      filter_uris_backward ~dbd ~facts (main, other_constants) uris
-  in
-  let rec aux = function
-    | [] -> []
-    | uri :: tl ->
-        (let status' =
-            try
-              let (proof, goal_list) =
-(*                debug_print ("STO APPLICANDO " ^ uri); *)
-               PET.apply_tactic
-                  (PrimitiveTactics.apply_tac
-                   ~term:(CicUtil.term_of_uri uri))
-                  status
-              in
-              let goal_list =
-                List.stable_sort (compare_goal_list proof) goal_list
-              in
-              Some (uri, (proof, goal_list))
-            with ProofEngineTypes.Fail _ -> None
-          in
-          match status' with
-          | None -> aux tl
-          | Some status' ->
-              status' :: aux tl)
-  in
-  List.stable_sort
-    (fun (_, (_, goals1)) (_, (_, goals2)) ->
-      Pervasives.compare (List.length goals1) (List.length goals2))
-    (aux uris)
-
 (* experimental_hint is a version of hint for experimental 
     purposes. It uses auto_tac_verbose instead of auto tac.
     Auto_tac verbose also returns a substitution - for the moment 
index 36e0e74971551c96441593c919f66290217eb0f7..c4b84453737206bb86263c91417496d39e338408 100644 (file)
@@ -35,14 +35,6 @@ val locate:
   dbd:Mysql.dbd ->
   ?vars:bool -> string -> UriManager.uri list
 
-val hint:
-  dbd:Mysql.dbd ->
-  ?facts:bool ->
-  ?signature:MetadataConstraints.term_signature ->
-  ProofEngineTypes.status ->
-    (UriManager.uri * 
-       (ProofEngineTypes.proof * ProofEngineTypes.goal list)) list
-
 val experimental_hint:
   dbd:Mysql.dbd ->
   ?facts:bool ->
index 60c60c7ff53a51b64d82534fdc6d2ad5c2608439..e67fa5fde13c4256376a67944a8b2597a38f4e1f 100644 (file)
@@ -27,7 +27,6 @@ let absurd = NegationTactics.absurd_tac
 let apply = PrimitiveTactics.apply_tac
 let assumption = VariousTactics.assumption_tac
 let auto = AutoTactic.auto_tac
-let auto_new = AutoTactic.auto_tac_new
 let change = PrimitiveTactics.change_tac
 let compare = DiscriminationTactics.compare_tac
 let constructor = IntroductionTactics.constructor_tac
index 2fbb409cdf35b4a79733d6766645b59177b75240..d5016dabc7829eb9f149119462226f0b4a69fcfe 100644 (file)
@@ -2,8 +2,7 @@
 val absurd : term:Cic.term -> ProofEngineTypes.tactic
 val apply : term:Cic.term -> ProofEngineTypes.tactic
 val assumption : ProofEngineTypes.tactic
-val auto : ?num:int option -> Mysql.dbd -> ProofEngineTypes.tactic
-val auto_new :
+val auto :
   ?depth:int ->
   ?width:int -> dbd:Mysql.dbd -> unit -> ProofEngineTypes.tactic
 val change : what:Cic.term -> with_what:Cic.term -> ProofEngineTypes.tactic