let size_of_state = P.size_of_state
+exception NotEmbeddable
+
+let not_embeddable status subst context ty =
+ let rec aux = function
+ | NCic.Meta _
+ | NCic.Const _
+ | NCic.Rel _
+ | NCic.Sort _ -> ()
+ | NCic.Appl l -> List.iter aux l
+ | t ->
+ (* cannot embed a blob term containing metas *)
+ if (NCicUntrusted.metas_of_term status subst context t = [])
+ then ()
+ else raise NotEmbeddable
+ in
+ try aux ty; noprint (lazy ("Embeddable")); false
+ with NotEmbeddable -> debug (lazy ("Not embeddable")); true
+;;
+
let tooflex (_,l,_,_) =
match l with
| Terms.Equation (l,r,_,o) ->
let bag = P.bag_of_state s in
let saturate (t,ty) =
NCicBlob.saturate status metasenv subst context t ty in
+ if not_embeddable status subst context ty
+ then (debug (lazy ("theorem not embeddable")); s)
+ else
let bag,clause = P.mk_passive bag (saturate (t,ty)) in
if Terms.is_eq_clause clause then
if tooflex clause then (debug (lazy "pruning tooflex"); s)
;;
let demod status metasenv subst context s goal =
+ if not_embeddable status subst context (snd goal) then [] else
(* let stamp = Unix.gettimeofday () in *)
match P.demod s goal with
| P.Error _ | P.GaveUp | P.Timeout _ -> []
let paramod status metasenv subst context s goal =
(* let stamp = Unix.gettimeofday () in *)
+ if not_embeddable status subst context (snd goal) then [] else
match P.nparamod ~useage:true ~max_steps:max_int
~timeout:(Unix.gettimeofday () +. 300.0) s goal with
| P.Error _ | P.GaveUp | P.Timeout _ -> []
;;
let fast_eq_check status metasenv subst context s goal =
+ if not_embeddable status subst context (snd goal) then [] else
(* let stamp = Unix.gettimeofday () in *)
match P.fast_eq_check s goal with
| P.Error _ | P.GaveUp | P.Timeout _ -> []