(* {{{ **************** applyS *******************)
let new_metasenv_and_unify_and_t
- dbd proof goal ?tables newmeta' metasenv' context term' ty termty goal_arity
+ dbd flags proof goal ?tables newmeta' metasenv' context term' ty termty
+ goal_arity
=
let (consthead,newmetasenv,arguments,_) =
ProofEngineHelpers.saturate_term newmeta' metasenv' context termty goal_arity in
PrimitiveTactics.apply_with_subst ~term:term'' ~subst:[] (proof''',goal)
in
match
- let cache, flags = cache_empty, default_flags() in
- let flags =
- {flags with use_only_paramod=true;timeout=Unix.gettimeofday() +. 30.0}
- in
+ let cache = cache_empty in
given_clause dbd ?tables 0 None cache [] flags true (proof'''',newmeta)
with
| None, active, passive, bag,_,_ ->
Cic.Prod (n,s,t) -> 1 + count_prods (Some (n,Cic.Decl s)::context) t
| _ -> 0
-let apply_smart ~dbd ~term ~subst ?tables (proof, goal) =
+let apply_smart ~dbd ~term ~subst ?tables flags (proof, goal) =
let module T = CicTypeChecker in
let module R = CicReduction in
let module C = Cic in
let termty = CicSubstitution.subst_vars exp_named_subst_diff termty in
let goal_arity = count_prods context ty in
let subst, proof, gl, active, passive =
- new_metasenv_and_unify_and_t dbd proof goal ?tables
+ new_metasenv_and_unify_and_t dbd flags proof goal ?tables
newmeta' metasenv' context term' ty termty goal_arity
in
subst, proof, gl, active, passive
| Fail s,tables,cache,maxm -> None,cache
;;
+let bool params name default =
+ try
+ let s = List.assoc name params in
+ if s = "" || s = "1" || s = "true" || s = "yes" || s = "on" then true
+ else if s = "0" || s = "false" || s = "no" || s= "off" then false
+ else
+ let msg = "Unrecognized value for parameter "^name^"\n" in
+ let msg = msg^"Accepted values are 1,true,yes,on and 0,false,no,off" in
+ raise (ProofEngineTypes.Fail (lazy msg))
+ with Not_found -> default
+;;
+
+let string params name default =
+ try List.assoc name params with
+ | Not_found -> default
+;;
+
+let int params name default =
+ try int_of_string (List.assoc name params) with
+ | Not_found -> default
+ | Failure _ ->
+ raise (ProofEngineTypes.Fail (lazy (name ^ " must be an integer")))
+;;
+
+let flags_of_params params ?(use_only_paramod = bool params "paramodulation" false) () =
+ let int = int params in
+ let bool = bool params in
+ let use_paramod = bool "use_paramod" true in
+ let depth = int "depth" ((AutoTypes.default_flags()).AutoTypes.maxdepth) in
+ let width = int "width" ((AutoTypes.default_flags()).AutoTypes.maxwidth) in
+ let timeout = int "timeout" 0 in
+ { AutoTypes.maxdepth =
+ if use_only_paramod then 2 else depth;
+ AutoTypes.maxwidth = width;
+ AutoTypes.timeout =
+ if timeout = 0 then
+ if use_only_paramod then Unix.gettimeofday () +. 30.0
+ else
+ 0.0
+ else
+ Unix.gettimeofday() +. (float_of_int timeout);
+ AutoTypes.use_paramod = use_paramod;
+ AutoTypes.use_only_paramod = use_only_paramod;
+ AutoTypes.dont_cache_failures = false
+ }
+
let applyS_tac ~dbd ~term ~params =
ProofEngineTypes.mk_tactic
(fun status ->
try
- let _, proof, gl,_,_ = apply_smart ~dbd ~term ~subst:[] status in
- proof, gl
+ let _, proof, gl,_,_ =
+ apply_smart ~dbd ~term ~subst:[]
+ (flags_of_params params ~use_only_paramod:true ()) status
+ in
+ proof, gl
with
| CicUnification.UnificationFailure msg
| CicTypeChecker.TypeCheckerFailure msg ->
raise (ProofEngineTypes.Fail msg))
+let auto_tac ~(dbd:HMysql.dbd) ~params (proof, goal) =
+ (* argument parsing *)
+ let string = string params in
+ let bool = bool params in
+ let use_only_paramod = bool "paramodulation" false in
+ (* hacks to debug paramod *)
+ let superposition = bool "superposition" false in
+ let target = string "target" "" in
+ let table = string "table" "" in
+ let subterms_only = bool "subterms_only" false in
+ let demod_table = string "demod_table" "" in
+ match superposition with
+ | true ->
+ (* this is the ugly hack to debug paramod *)
+ Saturation.superposition_tac
+ ~target ~table ~subterms_only ~demod_table (proof,goal)
+ | false ->
+ (* this is the real auto *)
+ let _, metasenv, _, _ = proof in
+ let _, context, goalty = CicUtil.lookup_meta goal metasenv in
+ let cache =
+ let cache =
+ AutoCache.cache_add_context context metasenv AutoCache.cache_empty
+ in
+ if use_only_paramod then (* only paramod *)
+ cache
+ else
+ AutoCache.cache_add_library dbd proof [goal] cache
+ in
+ let oldmetasenv = metasenv in
+ let flags = flags_of_params params () in
+ match auto dbd cache context metasenv [goal] flags with
+ | None,cache ->
+ raise (ProofEngineTypes.Fail (lazy "Auto gave up"))
+ | Some (subst,metasenv),cache ->
+ let proof,metasenv =
+ ProofEngineHelpers.subst_meta_and_metasenv_in_proof
+ proof goal (CicMetaSubst.apply_subst subst) metasenv
+ in
+ let opened =
+ ProofEngineHelpers.compare_metasenvs ~oldmetasenv
+ ~newmetasenv:metasenv
+ in
+ proof,opened
+;;
+
+let auto_tac ~dbd ~params = ProofEngineTypes.mk_tactic (auto_tac ~params ~dbd);;
let auto_tac ~params ~(dbd:HMysql.dbd) (proof, goal) =
(* argument parsing *)
- let int = int params
- and string = string params
- and bool = bool params in
+ let int = int params in
+ let bool = bool params in
let newauto = bool "new" false in
let depth = int "depth" ((AutoTypes.default_flags()).AutoTypes.maxdepth) in
let width = int "width" ((AutoTypes.default_flags()).AutoTypes.maxwidth) in
- let timeout = int "timeout" 0 in
- let use_paramod = bool "use_paramod" true in
- let use_only_paramod = bool "paramodulation" false in
- (* hacks to debug paramod *)
- let superposition = bool "superposition" false in
- let target = string "target" "" in
- let table = string "table" "" in
- let subterms_only = bool "subterms_only" false in
- let demod_table = string "demod_table" "" in
- let newauto = if use_only_paramod then true else newauto in
- match superposition with
- | true ->
- (* this is the ugly hack to debug paramod *)
- Saturation.superposition_tac
- ~target ~table ~subterms_only ~demod_table (proof,goal)
- | false ->
- if not newauto then
- auto_tac_old ~depth ~width ~dbd () (proof,goal)
- else
- (* this is the real auto *)
- let _, metasenv, _, _ = proof in
- let _, context, goalty = CicUtil.lookup_meta goal metasenv in
- let cache =
- let cache =
- AutoCache.cache_add_context context metasenv AutoCache.cache_empty
- in
- if use_only_paramod then (* only paramod *)
- cache
- else
- AutoCache.cache_add_library dbd proof [goal] cache
- in
- let oldmetasenv = metasenv in
- let flags = {
- AutoTypes.maxdepth =
- if use_only_paramod then 2 else depth;
- AutoTypes.maxwidth = width;
- AutoTypes.timeout =
- if timeout = 0 then float_of_int timeout
- else Unix.gettimeofday() +. (float_of_int timeout);
- AutoTypes.use_paramod = use_paramod;
- AutoTypes.use_only_paramod = use_only_paramod;
- AutoTypes.dont_cache_failures = false
- }
- in
- match Auto.auto dbd cache context metasenv [goal] flags with
- | None,cache ->
- raise (ProofEngineTypes.Fail (lazy "Auto gave up"))
- | Some (subst,metasenv),cache ->
- let proof,metasenv =
- ProofEngineHelpers.subst_meta_and_metasenv_in_proof
- proof goal (CicMetaSubst.apply_subst subst) metasenv
- in
- let opened =
- ProofEngineHelpers.compare_metasenvs ~oldmetasenv
- ~newmetasenv:metasenv
- in
- proof,opened
-;;
+ if not newauto then
+ auto_tac_old ~depth ~width ~dbd () (proof,goal)
+ else
+ ProofEngineTypes.apply_tactic (Auto.auto_tac ~dbd ~params) (proof,goal)
let auto_tac ~params ~dbd =
ProofEngineTypes.mk_tactic (auto_tac ~params ~dbd)