]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_unification/freshNamesGenerator.ml
debian: rebuilt against ocaml 3.08.3
[helm.git] / helm / ocaml / cic_unification / freshNamesGenerator.ml
index 3664b4a72473008ec526a83049df98ae0922b340..fbb90552aa9e4293792743a3329e248c9b24ae90 100644 (file)
 (* returns an identifier which is fresh in the context *)
 (* and that resembles [name] as much as possible.      *)
 (* [typ] will be the type of the variable              *)
-let mk_fresh_name metasenv context name ~typ =
+let mk_fresh_name ~subst metasenv context name ~typ =
  let module C = Cic in
   let basename =
    match name with
       C.Anonymous ->
        (*CSC: great space for improvements here *)
        (try
-         (match CicTypeChecker.type_of_aux' metasenv context typ with
+        let ty,_ = 
+          CicTypeChecker.type_of_aux' ~subst metasenv context typ 
+            CicUniv.empty_ugraph in 
+         (match ty with
              C.Sort C.Prop
            | C.Sort C.CProp -> "H"
            | C.Sort C.Set -> "x"
@@ -69,7 +72,7 @@ let clean_dummy_dependent_types t =
  let module C = Cic in
   let rec aux k =
    function
-      C.Rel m as t -> t,[m - k]
+      C.Rel m as t -> t,[k - m]
     | C.Var (uri,exp_named_subst) ->
        let exp_named_subst',rels = 
         List.fold_right
@@ -95,7 +98,7 @@ let clean_dummy_dependent_types t =
        in
         C.Meta(i,l'),rels
     | C.Sort _ as t -> t,[]
-    | C.Implicit as t -> t,[]
+    | C.Implicit as t -> t,[]
     | C.Cast (te,ty) ->
        let te',rels1 = aux k te in
        let ty',rels2 = aux k ty in
@@ -106,7 +109,13 @@ let clean_dummy_dependent_types t =
         let n' =
          match n with
             C.Anonymous ->
-             if List.mem k rels2 then assert false else C.Anonymous
+             if List.mem k rels2 then
+(
+              prerr_endline "If this happens often, we can do something about it (i.e. we can generate a new fresh name; problem: we need the metasenv and context ;-(. Alternative solution: mk_implicit does not generate entries for the elements in the context that have no name" ;
+              C.Anonymous
+)
+             else
+              C.Anonymous
           | C.Name _ as n ->
              if List.mem k rels2 then n else C.Anonymous
         in