]> matita.cs.unibo.it Git - helm.git/commitdiff
a. uniform mangement for context and library
authorAndrea Asperti <andrea.asperti@unibo.it>
Fri, 20 Oct 2006 15:32:34 +0000 (15:32 +0000)
committerAndrea Asperti <andrea.asperti@unibo.it>
Fri, 20 Oct 2006 15:32:34 +0000 (15:32 +0000)
b. collapsing flexible terms (X args) into a single meta. Metas in
   head position give arity problems with discrimination trees.
c. Even terms with a single meta as conlcusion (e.g. elimination
   principles) get indexed.

components/tactics/autoCache.ml
components/tactics/autoCache.mli

index 4c18713888d4e789421474fe092759d3f4c4211c..0b42391fa63beb345d941aa34a773562cdf8fb97 100644 (file)
@@ -49,18 +49,30 @@ let rec unfold context = function
       let t' = unfold ((Some (name,Cic.Decl s))::context) t in
        Cic.Prod(name,s,t')     
   | t -> ProofEngineReduction.unfold context t
+
+
+let rec collapse_head_metas = function 
+  | Cic.Appl(a::l) -> 
+      let a' = collapse_head_metas a in
+      (match a' with
+       | Cic.Meta(n,m) -> Cic.Meta(n,m)
+       | t ->  
+           let l' = List.map collapse_head_metas l in
+              Cic.Appl(t::l'))
+  | t -> t
+;;
   
-let rec head = function 
-  | Cic.Prod(_,_,t) -> CicSubstitution.subst (Cic.Meta (-1,[])) (head t)
+let rec head t = 
+  let rec aux = function
+  | Cic.Prod(_,_,t) -> 
+      CicSubstitution.subst (Cic.Meta (-1,[])) (aux t)
   | t -> t
+  in collapse_head_metas (aux t)
 ;;
 
-let index ((univ,oldcache) as cache) key term =
-  match key with
-  | Cic.Meta _ -> cache
-  | _ -> 
-      prerr_endline("ADD: "^CicPp.ppterm key^" |-> "^CicPp.ppterm term);
-      (TI.index univ key term,oldcache)
+let index (univ,oldcache) key term =
+  prerr_endline("ADD: "^CicPp.ppterm key^" |-> "^CicPp.ppterm term);
+  (TI.index univ key term,oldcache)
 ;;
 
 let index_term_and_unfolded_term cache context t ty =
@@ -72,47 +84,11 @@ let index_term_and_unfolded_term cache context t ty =
   with ProofEngineTypes.Fail _ -> cache
 ;;
 
-let cache_add_library dbd proof gl cache = 
-  let univ = MetadataQuery.universe_of_goals ~dbd proof gl in
-  let terms = List.map CicUtil.term_of_uri univ in
-  let tyof t = fst(CicTypeChecker.type_of_aux' [] [] t CicUniv.empty_ugraph)in
-  List.fold_left 
-    (fun acc term -> 
-      (* 
-      let key = head (tyof term) in
-      index acc key term
-      *)
-      index_term_and_unfolded_term acc [] term (tyof term))
-    cache terms
-;;
-let cache_add_context context metasenv cache =  
-  let tail = function [] -> [] | h::tl -> tl in
-  let rc,_,_ = 
-    List.fold_left 
-    (fun (acc,i,ctx) ctxentry ->
-      match ctxentry with
-      | Some (_,Cic.Decl t) -> 
-          let ty = CicSubstitution.lift i t in
-          let elem = Cic.Rel i in
-         index_term_and_unfolded_term acc context elem ty, i+1, tail ctx
-          (* index acc key elem, i+1, tail ctx *)
-      | Some (_,Cic.Def (_,Some t)) ->
-          let ty = CicSubstitution.lift i t in
-          let elem = Cic.Rel i in
-         index_term_and_unfolded_term acc context elem ty, i+1, tail ctx
-      | Some (_,Cic.Def (t,None)) ->
-          let ctx = tail ctx in 
-          let ty = 
-           CicSubstitution.lift i
-              (fst (CicTypeChecker.type_of_aux' metasenv ctx t CicUniv.empty_ugraph))
-          in
-          let elem = Cic.Rel i in
-         index_term_and_unfolded_term acc context elem ty, i+1, tail ctx
-      |  _ -> acc,i+1,tail ctx)
-    (cache,1,context) context
-  in
-  rc
-;;
+let cache_add_list cache context terms_and_types =
+  List.fold_left  
+    (fun acc (term,ty) -> 
+       index_term_and_unfolded_term acc context term ty)
+    cache terms_and_types
 
 let cache_examine (_,oldcache) cache_key = 
   try List.assoc cache_key oldcache with Not_found -> Notfound
index b47a29925ca322f13867afe4533a8948f7755ac2..61c658811fec86dd1934c632c40949c35a736fa2 100644 (file)
@@ -31,11 +31,8 @@ type cache_elem =
   | UnderInspection
   | Notfound
 val get_candidates: cache -> Cic.term -> Cic.term list
-val cache_add_library: 
-  HMysql.dbd -> ProofEngineTypes.proof -> ProofEngineTypes.goal list ->
-    cache -> cache
-val cache_add_context: Cic.context -> Cic.metasenv -> cache -> cache
-
+val cache_add_list: 
+    cache -> Cic.context -> (Cic.term*Cic.term) list -> cache
 val cache_examine: cache -> cache_key -> cache_elem
 val cache_add_failure: cache -> cache_key -> int -> cache 
 val cache_add_success: cache -> cache_key -> Cic.term -> cache