]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/ng_tactics/nTacStatus.ml
Added a fol operation
[helm.git] / helm / software / components / ng_tactics / nTacStatus.ml
index 462501e668a9c5260d72dfa860dd858731416b20..b58eb5558a8d95a2f6ce5564a0ea7ab228f19f2f 100644 (file)
@@ -194,10 +194,13 @@ let unify status ctx a b =
 ;;
 let unify a b c d = wrap "unify" (unify a b c) d;;
 
-let fix_sorts (ctx,t) =
+let fix_sorts status (ctx,t) =
  let f () =
-  let t = NCicUnification.fix_sorts t in
-   ctx,t
+  let name,height,metasenv,subst,obj = status#obj in
+  let metasenv, t = 
+    NCicUnification.fix_sorts metasenv subst t in
+  let status = status#set_obj (name,height,metasenv,subst,obj) in
+   status, (ctx,t)
  in
   wrap "fix_sorts" f ()
 ;;
@@ -226,6 +229,10 @@ let get_goalty status g =
  with NCicUtils.Meta_not_found _ as exn -> fail ~exn (lazy "get_goalty")
 ;;
 
+let get_subst status =
+  let _,_,_,subst,_ = status#obj in subst
+;;
+
 let to_subst status i entry =
  let name,height,metasenv,subst,obj = status#obj in
  let metasenv = List.filter (fun j,_ -> j <> i) metasenv in
@@ -248,13 +255,13 @@ let instantiate_with_ast status i t =
   to_subst status i (gname,context,t,gty)
 ;;
 
-let mk_meta status ?(attrs=[]) ctx bo_or_ty =
+let mk_meta status ?(attrs=[]) ctx bo_or_ty kind =
   match bo_or_ty with
   | `Decl ty ->
       let status, (_,ty) = relocate status ctx ty in
       let n,h,metasenv,subst,o = status#obj in
       let metasenv, _, instance, _ = 
-        NCicMetaSubst.mk_meta ~attrs metasenv ctx (`WithType ty)
+        NCicMetaSubst.mk_meta ~attrs metasenv ctx ~with_type:ty kind
       in
       let status = status#set_obj (n,h,metasenv,subst,o) in
       status, (ctx,instance)
@@ -263,7 +270,8 @@ let mk_meta status ?(attrs=[]) ctx bo_or_ty =
       let status, (_,ty) = typeof status ctx bo in
       let n,h,metasenv,subst,o = status#obj in
       let metasenv, metano, instance, _ = 
-        NCicMetaSubst.mk_meta ~attrs metasenv ctx (`WithType ty) in
+        NCicMetaSubst.mk_meta ~attrs metasenv ctx ~with_type:ty kind in
+      let attrs,_,_ = NCicUtils.lookup_meta metano metasenv in
       let metasenv = List.filter (fun j,_ -> j <> metano) metasenv in
       let subst = (metano, (attrs, ctx, bo_, ty)) :: subst in
       let status = status#set_obj (n,h,metasenv,subst,o) in
@@ -271,11 +279,11 @@ let mk_meta status ?(attrs=[]) ctx bo_or_ty =
 ;;
 
 let mk_in_scope status t =
-  mk_meta status ~attrs:[`InScope] (ctx_of t) (`Def t)
+  mk_meta status ~attrs:[`InScope] (ctx_of t) (`Def t) `IsTerm
 ;;
 
 let mk_out_scope n status t = 
-  mk_meta status ~attrs:[`OutScope n] (ctx_of t) (`Def t)
+  mk_meta status ~attrs:[`OutScope n] (ctx_of t) (`Def t) `IsTerm
 ;;
 
 (* the following unification problem will be driven by 
@@ -407,6 +415,11 @@ let apply_subst status ctx t =
   status, (ctx, NCicUntrusted.apply_subst subst ctx t)
 ;;
 
+let metas_of_term status (context,t) =
+ let _,_,_,subst,_ = status#obj in
+ NCicUntrusted.metas_of_term subst context t
+;;
+
 (* ============= move this elsewhere ====================*)
 
 class ['stack] status =
@@ -445,6 +458,8 @@ let ppelem = function
   | Dead -> "Dead"
 ;;
 
+let string_of_path l = String.concat "." (List.map ppelem l) ;;
+
 let path_string_of (ctx,t) =
   let len_ctx = List.length ctx in
   let rec aux arity = function
@@ -463,7 +478,9 @@ let path_string_of (ctx,t) =
     | NCic.Const (NReference.Ref (u,_)) -> [Constant (u, arity)]
     | NCic.Match _ -> [Dead]
   in 
-    aux 0 t
+  let path = aux 0 t in
+(*   prerr_endline (string_of_path path); *)
+  path
 ;;
 
 let compare e1 e2 =
@@ -474,7 +491,6 @@ let compare e1 e2 =
   | e1,e2 -> Pervasives.compare e1 e2
 ;;
 
-let string_of_path l = String.concat "." (List.map ppelem l) ;;
 
 end