]> matita.cs.unibo.it Git - helm.git/commitdiff
Sorts are no longer all convertible. To be completed once that universes
authorAndrea Asperti <andrea.asperti@unibo.it>
Tue, 16 Mar 2004 17:47:06 +0000 (17:47 +0000)
committerAndrea Asperti <andrea.asperti@unibo.it>
Tue, 16 Mar 2004 17:47:06 +0000 (17:47 +0000)
are implemented.

helm/ocaml/cic_proof_checking/cicReductionMachine.ml
helm/ocaml/cic_proof_checking/cicTypeChecker.ml
helm/ocaml/cic_unification/cicUnification.ml

index dbe22fb3e6ceb107b7d77d7af1d57fecb2e213df..4aee1b2b922292ae8a2998bc9a63582123eb263e 100644 (file)
@@ -802,7 +802,7 @@ let are_convertible =
                   | _,None  -> true
                   | Some t1',Some t2' -> aux context t1' t2'
               ) true l1 l2
-        | (C.Sort s1, C.Sort s2) -> true (*CSC da finire con gli universi *)
+        | (C.Sort s1, C.Sort s2) when s1 = s2 || s2 = C.Type -> true
         | (C.Prod (name1,s1,t1), C.Prod(_,s2,t2)) ->
            aux context s1 s2 &&
             aux ((Some (name1, (C.Decl s1)))::context) t1 t2
index 431449e43886c6614f5e6c8b4c417e90e75fefe4..04b769b5c2b68366d2c1f765a39d21f7b7f43f62 100644 (file)
@@ -1665,7 +1665,7 @@ in if not res then debug_print ("#### " ^ CicPp.ppterm (type_of_aux context p) ^
    | (hete, hety)::tl ->
     (match (CicReduction.whd context hetype) with
         Cic.Prod (n,s,t) ->
-         if CicReduction.are_convertible context s hety then
+         if CicReduction.are_convertible context hety s then
           (CicReduction.fdebug := -1 ;
            eat_prods context (CicSubstitution.subst hete t) tl
           )
index 9c2dde84b45dd1aef507d2a6a00d3c8dcfb8e818..c56fb087423c457c3c599053544ec4e1ce0ab4f4 100644 (file)
@@ -92,15 +92,28 @@ let rec fo_unif_subst subst context metasenv t1 t2 =
           raise (UnificationFailure (sprintf
             "Error trying to unify %s with %s: the algorithm tried to check whether the two substitutions are convertible; if they are not, it tried to unify the two substitutions. No restriction was attempted."
             (CicMetaSubst.ppterm subst t1) (CicMetaSubst.ppterm subst t2)))
-   | (C.Meta (n,l), C.Meta (m,_)) when n>m ->
+   | (C.Meta (n,_), C.Meta (m,_)) when n>m ->
        fo_unif_subst subst context metasenv t2 t1
    | (C.Meta (n,l), t)   
    | (t, C.Meta (n,l)) ->
+       let fo_unif_subst =
+        let (lower,upper) =
+         match t1,t2 with
+            C.Meta (n,_), C.Meta (m,_) when n < m ->
+             (fun t1 t2 -> t1), (fun t1 t2 -> t2)
+          | _, C.Meta _ ->
+             (fun t1 t2 -> t1), (fun t1 t2 -> t2)
+          | _,_ ->
+             (fun t1 t2 -> t2), (fun t1 t2 -> t1)
+        in
+         fun subst context metasenv m1 m2 ->
+          fo_unif_subst subst context metasenv (lower m1 m2) (upper m1 m2)
+       in
        let subst'',metasenv' =
         try
          let oldt = (List.assoc n subst) in
          let lifted_oldt = S.lift_meta l oldt in
-          fo_unif_subst subst context metasenv lifted_oldt t
+          fo_unif_subst subst context metasenv t lifted_oldt
         with Not_found ->
          let t',metasenv',subst' =
           try
@@ -116,7 +129,7 @@ let rec fo_unif_subst subst context metasenv t1 t2 =
           let tyt =
             type_of_aux' metasenv' subst'' context t
           in
-           fo_unif_subst subst'' context metasenv' (S.lift_meta l meta_type) tyt
+           fo_unif_subst subst'' context metasenv' tyt (S.lift_meta l meta_type)
         with AssertFailure _ ->
           (* TODO huge hack!!!!
            * we keep on unifying/refining in the hope that the problem will be