]> matita.cs.unibo.it Git - helm.git/commitdiff
fixed regression in casting an argument to funclass, this incidentally leaded to...
authorEnrico Tassi <enrico.tassi@inria.fr>
Thu, 10 Jul 2008 08:00:30 +0000 (08:00 +0000)
committerEnrico Tassi <enrico.tassi@inria.fr>
Thu, 10 Jul 2008 08:00:30 +0000 (08:00 +0000)
helm/software/components/cic_unification/cicRefine.ml
helm/software/components/cic_unification/coercGraph.ml
helm/software/components/cic_unification/coercGraph.mli

index fc9dc840d1bb5323ff9526ce57d561664b5999ac..bde5d63e413978703bf8ef0d58a9908f478d1d34 100644 (file)
@@ -1251,9 +1251,11 @@ and type_of_aux' ?(clean_dummy_dependent_types=true) ?(localization_tbl = Cic.Ci
     (* given he:hety, gives beack all (c he) such that (c e):?->? *)
     let fix_arity n metasenv context subst he hetype ugraph =
       let hetype = CicMetaSubst.apply_subst subst hetype in
-      let src = CoercDb.coerc_carr_of_term hetype 0 in 
-      let tgt = CoercDb.coerc_carr_of_term (Cic.Implicit None) 1 in
-      match CoercGraph.look_for_coercion' metasenv subst context src tgt with
+      (* instead of a dummy functional type we may create the real product
+       * using args_bo_and_ty, but since coercions lookup ignores the 
+       * actual ariety we opt for the simple solution *)
+      let fty = Cic.Prod(Cic.Anonymous, Cic.Sort Cic.Prop, Cic.Sort Cic.Prop) in
+      match CoercGraph.look_for_coercion metasenv subst context hetype fty with
       | CoercGraph.NoCoercion -> []
       | CoercGraph.NotHandled ->
          raise (MoreArgsThanExpected (n,Uncertain (lazy "")))
index 637944e6b8401e4df87c38e793c40a740d68da65..2fa2c4b0c5ca4ba216534de62d26cbebb9e02bcd 100644 (file)
@@ -70,7 +70,7 @@ let saturate_coercion ul metasenv subst context =
 ;;
           
 (* searches a coercion fron src to tgt in the !coercions list *)
-let look_for_coercion' metasenv subst context src tgt =
+let look_for_coercion_carr metasenv subst context src tgt =
   let is_dead = function CoercDb.Dead -> true | _ -> false in
   let pp_l s l =
    match l with
@@ -108,10 +108,18 @@ let look_for_coercion' metasenv subst context src tgt =
      | ul -> SomeCoercion (saturate_coercion ul metasenv subst context))
 ;;
 
+let rec count_pi c s t =
+  match CicReduction.whd ~delta:false ~subst:s c t with
+  | Cic.Prod (_,_,t) -> 1 + count_pi c s t
+  | _ -> 0
+;;
+
 let look_for_coercion metasenv subst context src tgt = 
-  let src_uri = CoercDb.coerc_carr_of_term src 0 in
-  let tgt_uri = CoercDb.coerc_carr_of_term tgt 0 in
-  look_for_coercion' metasenv subst context src_uri tgt_uri
+  let src_arity = count_pi context subst src in
+  let tgt_arity = count_pi context subst tgt in
+  let src_carr = CoercDb.coerc_carr_of_term src src_arity in
+  let tgt_carr = CoercDb.coerc_carr_of_term tgt tgt_arity in
+  look_for_coercion_carr metasenv subst context src_carr tgt_carr
 
 let source_of t = 
   match CoercDb.is_a_coercion t with
index 1a3be89f38efb20bc13b77b3752d232b4c8992b7..abc94688c5a6b27897ca1c63b2fc8a1946e45efd 100644 (file)
@@ -40,10 +40,6 @@ val look_for_coercion :
   Cic.metasenv -> Cic.substitution -> Cic.context ->
    Cic.term -> Cic.term -> coercion_search_result
 
-val look_for_coercion' :
-  Cic.metasenv -> Cic.substitution -> Cic.context ->
-   CoercDb.coerc_carr -> CoercDb.coerc_carr -> coercion_search_result
-
 (* checks if term is a constant or 
  * a constant applyed that is marked with (`Class `Coercion) *)
 val is_composite: Cic.term -> bool