]> 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 672c90cd8043ed76c1ff243129eccab1681f7412..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,13 +71,6 @@ let fresh_subst metasenv context uris =
           (uri,Cic.Meta(newmeta+2,irl))::l in
     aux newmeta uris
 
-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
@@ -87,7 +90,14 @@ 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 ->
+    | 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 (idx, irl)
@@ -142,7 +152,6 @@ let expand_implicits metasenv context term =
           List.fold_right
             (fun (name, _, typ, _) (metasenv, types) ->
               let new_metasenv, new_type = aux metasenv context typ in
-prerr_endline ("UH? " ^ CicPp.ppterm typ ^ " ==> " ^ CicPp.ppterm new_type) ;
               (new_metasenv, (name, new_type) :: types))
             funs (metasenv, [])
         in