]> 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 ed583fdaf1546d84bbdfc786760db267234a402c..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