]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/cic/cicParser.ml
Avoid other comparisons on universes using =.
[helm.git] / helm / software / components / cic / cicParser.ml
index 3d1d3d1aa05ccbcd1ee313d8574b870b09fad3bd..0f36f1a04d8b2ab886eb3861d904469efec20511 100644 (file)
@@ -296,14 +296,17 @@ let uri_list_of_string =
   fun s ->
     List.map uri_of_string (Str.split space_RE s)
 
+let impredicative_set = ref true;;
+
 let sort_of_string ctxt = function
   | "Prop" -> Cic.Prop
-  | "Set"  -> Cic.Set
   | "CProp" -> Cic.CProp
   (* THIS CASE IS HERE ONLY TO ALLOW THE PARSING OF COQ LIBRARY
    * THIS SHOULD BE REMOVED AS SOON AS univ_maker OR COQ'S EXPORTATION 
    * IS FIXED *)
   | "Type" ->  Cic.Type (CicUniv.fresh ~uri:ctxt.uri ())
+  | "Set" when !impredicative_set -> Cic.Set
+  | "Set" -> Cic.Type (CicUniv.fresh ~uri:ctxt.uri ())
   | s ->
       let len = String.length s in
       if not(len > 5) then parse_error ctxt "sort expected";
@@ -406,8 +409,15 @@ let end_element ctxt tag =
         | ["id", id; "type", _] -> Decl (id, Cic.Anonymous, source)
         | _ -> attribute_error ())
   | "def" ->  (* same as "decl" above *)
-      let ty = pop_cic ctxt in
-      let source = pop_cic ctxt in
+      let ty,source =
+       (*CSC: hack to parse Coq files where the LetIn is not typed *)
+       let ty = pop_cic ctxt in
+       try
+        let source = pop_cic ctxt in
+         ty,source
+       with
+        Parser_failure _ -> Cic.AImplicit ("MISSING_def_TYPE",None),ty
+      in
       push ctxt
         (match pop_tag_attrs ctxt with
         | ["binder", binder; "id", id]