]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/cic_unification/cicRefine.ml
some minor fixes
[helm.git] / helm / software / components / cic_unification / cicRefine.ml
index 45b2bce8f79b97bdd29e02e795d37cd8e32a549c..eb350d2e5165500501cea3efb33154a31fad6f4b 100644 (file)
@@ -131,6 +131,20 @@ let exp_impl metasenv subst context =
   | _ -> assert false
 ;;
 
+let unvariant newt =
+ match newt with
+ | Cic.Appl (hd::args) ->
+    let uri = CicUtil.uri_of_term hd in
+    (match 
+      CicEnvironment.get_obj CicUniv.oblivion_ugraph uri 
+    with
+    | Cic.Constant (_,Some t,_,[],attrs),_ 
+      when List.exists ((=) (`Flavour `Variant)) attrs -> 
+       Cic.Appl (t::args)
+    | _ -> newt)
+ | _ -> newt
+;;
+
 let is_a_double_coercion t =
   let rec subst_nth n x l =
     match n,l with
@@ -1192,11 +1206,6 @@ and type_of_aux' ?(clean_dummy_dependent_types=true) ?(localization_tbl = Cic.Ci
          let selected =
            HExtlib.list_findopt
              (fun (metasenv,last,c) _ ->
-               match c with 
-               | c when not (CoercGraph.is_composite c) -> 
-                   debug_print (lazy ("\nNot a composite.."^CicPp.ppterm c));
-                   None
-               | c ->
                let subst,metasenv,ugraph =
                 fo_unif_subst subst context metasenv last head ugraph in
                debug_print (lazy ("\nprovo" ^ CicPp.ppterm c));
@@ -1305,7 +1314,8 @@ and type_of_aux' ?(clean_dummy_dependent_types=true) ?(localization_tbl = Cic.Ci
                   ugraph
                 in 
                  debug_print (lazy (" has type: "^ pp tty));
-                 Some (coerc,tty,subst,metasenv,ugraph)
+
+                 Some (unvariant coerc,tty,subst,metasenv,ugraph)
               with
               | Uncertain _ | RefineFailure _
               | HExtlib.Localized (_,Uncertain _)
@@ -1457,6 +1467,7 @@ and type_of_aux' ?(clean_dummy_dependent_types=true) ?(localization_tbl = Cic.Ci
                 if b then 
                   Some ((t,infty), subst, metasenv, ugraph)
                 else 
+                 let newt =  unvariant newt in
                   Some ((newt,newty), subst, metasenv, ugraph)
                with 
                | Uncertain _ -> uncertain := true; None