X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_cic_content%2FnTermCicContent.ml;h=3c17823b6c9160e25f298839d67c41703a395aba;hb=b266ed97b63400d62ab4ba6a4ebdfbc1d5b0c2bb;hp=c53a4a31c6ad0b7603f4dc8497323889012ea5c8;hpb=d34061fd1c820139fad38c39dee6377e5057bf26;p=helm.git diff --git a/helm/software/components/ng_cic_content/nTermCicContent.ml b/helm/software/components/ng_cic_content/nTermCicContent.ml index c53a4a31c..3c17823b6 100644 --- a/helm/software/components/ng_cic_content/nTermCicContent.ml +++ b/helm/software/components/ng_cic_content/nTermCicContent.ml @@ -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 ;;