]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/ng_cic_content/nTermCicContent.ml
let rec/corec and co/inductive are not printed!
[helm.git] / helm / software / components / ng_cic_content / nTermCicContent.ml
index c53a4a31c6ad0b7603f4dc8497323889012ea5c8..3c17823b6c9160e25f298839d67c41703a395aba 100644 (file)
@@ -103,9 +103,11 @@ let nast_of_cic0 status
     | NCic.Lambda (n,s,t) ->
         idref (Ast.Binder (`Lambda,(Ast.Ident (n,None), Some (k ~context s)),
          k ~context:((n,NCic.Decl s)::context) t))
+    | NCic.LetIn (n,s,ty,NCic.Rel 1) ->
+        idref (Ast.Cast (k ~context ty, k ~context s))
     | NCic.LetIn (n,s,ty,t) ->
-        idref (Ast.LetIn ((Ast.Ident (n,None), Some (k ~context ty)), k ~context s,
-         k ~context:((n,NCic.Decl s)::context) t))
+        idref (Ast.LetIn ((Ast.Ident (n,None), Some (k ~context s)), k ~context
+          ty, k ~context:((n,NCic.Decl s)::context) t))
     | NCic.Appl (NCic.Meta (n,lc) :: args) when List.mem_assoc n subst -> 
        let _,_,t,_ = List.assoc n subst in
        let hd = NCicSubstitution.subst_meta lc t in
@@ -454,6 +456,8 @@ let nmap_sequent status ~metasenv ~subst conjecture =
 let object_prefix = "obj:";;
 let declaration_prefix = "decl:";;
 let definition_prefix = "def:";;
+let inductive_prefix = "ind:";;
+let joint_prefix = "joint:";;
 
 let get_id =
  function
@@ -534,9 +538,61 @@ let nmap_obj status (uri,_,metasenv,subst,kind) =
       (*CSC: used to be the previous line, that uses seed *)
       Some (List.map (nmap_sequent0 status ~idref ~metasenv ~subst) metasenv)
   in
+let  build_constructors seed l =
+      List.map 
+       (fun (_,n,ty) ->
+           let ty = nast_of_cic ~context:[] ty in
+           { K.dec_name = Some n;
+             K.dec_id = gen_id declaration_prefix seed;
+             K.dec_inductive = false;
+             K.dec_aref = "";
+             K.dec_type = ty
+           }) l
+in
+let build_inductive b seed = 
+      fun (_,n,ty,cl) ->
+        let ty = nast_of_cic ~context:[] ty in
+        `Inductive
+          { K.inductive_id = gen_id inductive_prefix seed;
+            K.inductive_name = n;
+            K.inductive_kind = b;
+            K.inductive_type = ty;
+            K.inductive_constructors = build_constructors seed cl
+           }
+in
+let build_fixpoint b seed = 
+      fun (_,n,_,ty,t) ->
+        let t = nast_of_cic ~context:[] t in
+        let ty = nast_of_cic ~context:[] ty in
+        `Definition
+          { K.def_id = gen_id inductive_prefix seed;
+            K.def_name = Some n;
+            K.def_aref = "";
+            K.def_type = ty;
+            K.def_term = t;
+           }
+in
   let res =
    match kind with
-      NCic.Constant (_,_,Some bo,ty,_) ->
+    | NCic.Fixpoint (is_rec, ifl, _) -> 
+         (gen_id object_prefix seed, [], conjectures,
+            `Joint
+              { K.joint_id = gen_id joint_prefix seed;
+                K.joint_kind = 
+                   if is_rec then 
+                        `Recursive (List.map (fun (_,_,i,_,_) -> i) ifl)
+                   else `CoRecursive;
+                K.joint_defs = List.map (build_fixpoint is_rec seed) ifl
+              }) 
+    | NCic.Inductive (is_ind, lno, itl, _) ->
+         (gen_id object_prefix seed, [], conjectures,
+            `Joint
+              { K.joint_id = gen_id joint_prefix seed;
+                K.joint_kind = 
+                   if is_ind then `Inductive lno else `CoInductive lno;
+                K.joint_defs = List.map (build_inductive is_ind seed) itl
+              }) 
+    | NCic.Constant (_,_,Some bo,ty,_) ->
        let ty = nast_of_cic ~context:[] ty in
        let bo = nast_of_cic ~context:[] bo in
         (gen_id object_prefix seed, [], conjectures,
@@ -548,39 +604,6 @@ let nmap_obj status (uri,_,metasenv,subst,kind) =
            `Decl (K.Const,
              (*CSC: ??? get_id ty here used to be the id of the axiom! *)
              build_decl_item seed (get_id ty) (NUri.name_of_uri uri) ty))
-(*
-    | C.AInductiveDefinition (id,l,params,nparams,_) ->
-         (gen_id object_prefix seed, params, conjectures,
-            `Joint
-              { K.joint_id = gen_id joint_prefix seed;
-                K.joint_kind = `Inductive nparams;
-                K.joint_defs = List.map (build_inductive seed) l
-              }) 
-
-and
-    build_inductive seed = 
-     let module K = Content in
-      fun (_,n,b,ty,l) ->
-        `Inductive
-          { K.inductive_id = gen_id inductive_prefix seed;
-            K.inductive_name = n;
-            K.inductive_kind = b;
-            K.inductive_type = ty;
-            K.inductive_constructors = build_constructors seed l
-           }
-
-and 
-    build_constructors seed l =
-     let module K = Content in
-      List.map 
-       (fun (n,t) ->
-           { K.dec_name = Some n;
-             K.dec_id = gen_id declaration_prefix seed;
-             K.dec_inductive = false;
-             K.dec_aref = "";
-             K.dec_type = t
-           }) l
-*)
  in
   res,ids_to_refs
 ;;