]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_proof_checking/cicTypeChecker.ml
Partial porting to V8 URIs.
[helm.git] / helm / ocaml / cic_proof_checking / cicTypeChecker.ml
index 9c9c0e58cd0dd2a9428d1c967ba272d619685a34..137f786ab1fc003e7432605ee82116a0e9d6093c 100644 (file)
@@ -265,7 +265,7 @@ and weakly_positive context n nn uri te =
  let module C = Cic in
 (*CSC: Che schifo! Bisogna capire meglio e trovare una soluzione ragionevole!*)
   let dummy_mutind =
-   C.MutInd (UriManager.uri_of_string "cic:/Coq/Init/Datatypes/nat.ind",0,[])
+   C.MutInd (HelmLibraryObjects.Datatypes.nat_URI,0,[])
   in
   (*CSC mettere in cicSubstitution *)
   let rec subst_inductive_type_with_dummy_mutind =
@@ -604,13 +604,16 @@ and get_new_safes context p c rl safes n nn x =
    | (C.Prod _, (C.Rel _ as e), _)
    | (C.MutInd _, e, [])
    | (C.Appl _, e, []) -> (e,safes,n,nn,x,context)
-   | (_,_,_) ->
+   | (c,p,l) ->
       (* CSC: If the next exception is raised, it just means that   *)
       (* CSC: the proof-assistant allows to use very strange things *)
       (* CSC: as a branch of a case whose type is a Prod. In        *)
       (* CSC: particular, this means that a new (C.Prod, x,_) case  *)
       (* CSC: must be considered in this match. (e.g. x = MutCase)  *)
-      raise (AssertFailure "7")
+      raise
+       (AssertFailure
+         (Printf.sprintf "Get New Safes: c=%s ; p=%s"
+           (CicPp.ppterm c) (CicPp.ppterm p)))
 
 and split_prods context n te =
  let module C = Cic in
@@ -841,17 +844,21 @@ and guarded_by_destructors context n nn kl x safes =
            let (tys,len,isinductive,paramsno,cl) =
             match CicEnvironment.get_obj uri with
                C.InductiveDefinition (tl,_,paramsno) ->
-                let (_,isinductive,_,cl) = List.nth tl i in
-                 let tys =
-                  List.map (fun (n,_,ty,_) ->
-                   Some(Cic.Name n,(Cic.Decl ty))) tl
-                 in
-                  let cl' =
-                   List.map
-                    (fun (id,ty) ->
-                      (id, snd (split_prods tys paramsno ty))) cl
+                let len = List.length tl in
+                 let (_,isinductive,_,cl) = List.nth tl i in
+                  let tys =
+                   List.map (fun (n,_,ty,_) ->
+                    Some(Cic.Name n,(Cic.Decl ty))) tl
                   in
-                   (tys,List.length tl,isinductive,paramsno,cl')
+                   let cl' =
+                    List.map
+                     (fun (id,ty) ->
+                      let debrujinedty = debrujin_constructor uri len ty in
+                       (id, snd (split_prods tys paramsno ty),
+                        snd (split_prods tys paramsno debrujinedty)
+                       )) cl
+                   in
+                    (tys,len,isinductive,paramsno,cl')
              | _ ->
                 raise (TypeCheckerFailure
                   ("Unknown mutual inductive definition:" ^
@@ -869,11 +876,8 @@ and guarded_by_destructors context n nn kl x safes =
              guarded_by_destructors context n nn kl x safes outtype &&
               (*CSC: manca ??? il controllo sul tipo di term? *)
               List.fold_right
-               (fun (p,(_,c)) i ->
-                 let rl' =
-                  let debrujinedte = debrujin_constructor uri len c in
-                   recursive_args tys 0 len debrujinedte
-                 in
+               (fun (p,(_,c,brujinedc)) i ->
+                 let rl' = recursive_args tys 0 len brujinedc in
                   let (e,safes',n',nn',x',context') =
                    get_new_safes context p c rl' safes n nn x
                   in
@@ -1338,8 +1342,7 @@ and type_of_aux' metasenv context t =
          | None -> raise (TypeCheckerFailure "Reference to deleted hypothesis")
         with
         _ ->
-          raise (TypeCheckerFailure
-            "unbound variable found in constructor type")
+          raise (TypeCheckerFailure "unbound variable")
        )
     | C.Var (uri,exp_named_subst) ->
       incr fdebug ;