]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_unification/cicMkImplicit.ml
bumped version (tag soon)
[helm.git] / helm / ocaml / cic_unification / cicMkImplicit.ml
index 9db79254651bbdda49ecc464ad94332a14166100..f433fb19b92ead3a19e0913b82f6dd108b73d9f2 100644 (file)
@@ -28,11 +28,21 @@ let new_meta metasenv =
 let mk_implicit metasenv context =
   let newmeta = new_meta metasenv in
   let irl = identity_relocation_list_for_metavariable context in
-  ([ newmeta, context, Cic.Sort Cic.Type ;
-    newmeta + 1, context, Cic.Meta (newmeta, irl);
+  ([ newmeta, [], Cic.Sort Cic.Type ;
+    newmeta + 1, context, Cic.Meta (newmeta, []);
     newmeta + 2, context, Cic.Meta (newmeta + 1,irl) ] @ metasenv,
    newmeta + 2)
 
+let mk_implicit_type metasenv context =
+  let newmeta = new_meta metasenv in
+  ([ newmeta, [], Cic.Sort Cic.Type ;
+    newmeta + 1, context, Cic.Meta (newmeta, []) ] @metasenv,
+   newmeta + 1)
+
+let mk_implicit_sort metasenv =
+  let newmeta = new_meta metasenv in
+  ([ newmeta, [], Cic.Sort Cic.Type] @ metasenv, newmeta)
+
 let n_fresh_metas metasenv context n = 
   if n = 0 then metasenv, []
   else 
@@ -61,17 +71,6 @@ let fresh_subst metasenv context uris =
           (uri,Cic.Meta(newmeta+2,irl))::l in
     aux newmeta uris
 
-let mk_implicit' metasenv context =
-  let (metasenv, index) = mk_implicit metasenv context in
-  (metasenv, index - 1, index)
-
-let mk_implicit_type metasenv context =
-  let newmeta = new_meta metasenv in
-  let irl = identity_relocation_list_for_metavariable context in
-  ([ newmeta, context, Cic.Sort Cic.Type ;
-    newmeta + 1, context, Cic.Meta (newmeta, irl) ] @metasenv,
-   newmeta + 1)
-
 let expand_implicits metasenv context term =
   let rec aux metasenv context = function
     | (Cic.Rel _) as t -> metasenv, t
@@ -91,10 +90,17 @@ let expand_implicits metasenv context term =
     | Cic.Meta (n,l) -> 
         let metasenv', l' = do_local_context metasenv context l in
         metasenv', Cic.Meta (n, l')
-    | Cic.Implicit ->
-        let (metasenv', type_index, _) = mk_implicit' metasenv context in
+    | Cic.Implicit (Some `Type) ->
+        let (metasenv', idx) = mk_implicit_type metasenv context in
+        let irl = identity_relocation_list_for_metavariable context in
+        metasenv', Cic.Meta (idx, irl)
+    | Cic.Implicit (Some `Closed) ->
+        let (metasenv', idx) = mk_implicit metasenv [] in
+        metasenv', Cic.Meta (idx, [])
+    | Cic.Implicit None ->
+        let (metasenv', idx) = mk_implicit metasenv context in
         let irl = identity_relocation_list_for_metavariable context in
-        metasenv', Cic.Meta (type_index, irl)
+        metasenv', Cic.Meta (idx, irl)
     | Cic.Cast (te, ty) ->
         let metasenv', ty' = aux metasenv context ty in
         let metasenv'', te' = aux metasenv' context te in