]> matita.cs.unibo.it Git - helm.git/commitdiff
unvariant also for coercions to funclass
authorEnrico Tassi <enrico.tassi@inria.fr>
Thu, 15 Jan 2009 15:33:22 +0000 (15:33 +0000)
committerEnrico Tassi <enrico.tassi@inria.fr>
Thu, 15 Jan 2009 15:33:22 +0000 (15:33 +0000)
helm/software/components/cic_unification/cicRefine.ml

index 801e80d6c003428d9e1162180b4d751f786e803a..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
@@ -1300,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 _)
@@ -1452,19 +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 =  (* unfold coercion if `Variant *)
-                  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
-                 in
+                 let newt =  unvariant newt in
                   Some ((newt,newty), subst, metasenv, ugraph)
                with 
                | Uncertain _ -> uncertain := true; None