X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=components%2Fgrafite_engine%2FgrafiteSync.ml;h=fecdde3c6a8321edcadec528908ff138222e611f;hb=d7227b93729c13636d297b959b7d8c178dfe3aaf;hp=37a3132e70e232c04b1437f6613d36c6983a02ef;hpb=7f2444c2670cadafddd8785b687ef312158376b0;p=helm.git diff --git a/components/grafite_engine/grafiteSync.ml b/components/grafite_engine/grafiteSync.ml index 37a3132e7..fecdde3c6 100644 --- a/components/grafite_engine/grafiteSync.ml +++ b/components/grafite_engine/grafiteSync.ml @@ -27,13 +27,81 @@ open Printf -let add_obj ~basedir uri obj status = - let lemmas = LibrarySync.add_obj uri obj basedir in - {status with GrafiteTypes.objects = uri::status.GrafiteTypes.objects}, +let is_a_variant obj = + match obj with + | Cic.Constant(_,_,_,_,attrs) -> + List.exists (fun x -> x = `Flavour `Variant) attrs + | _ -> false + +let uris_for_inductive_type uri obj = + match obj with + | Cic.InductiveDefinition(types,_,_,_) -> + let suri = UriManager.string_of_uri uri in + let uris,_ = + List.fold_left + (fun (acc,i) (_,_,_,constructors)-> + let is = string_of_int i in + let newacc,_ = + List.fold_left + (fun (acc,j) _ -> + let js = string_of_int j in + UriManager.uri_of_string + (suri^"#xpointer(1/"^is^"/"^js^")")::acc,j+1) + (acc,1) constructors + in + newacc,i+1) + ([],1) types + in uris + | _ -> [uri] + +let add_obj refinement_toolkit uri obj status = + let lemmas = LibrarySync.add_obj refinement_toolkit uri obj in + let add_to_universe (universe,status) uri = + let term = CicUtil.term_of_uri uri in + let ty,_ = CicTypeChecker.type_of_aux' [] [] term CicUniv.empty_ugraph in +(* prop filtering + let sort,_ = CicTypeChecker.type_of_aux' [] [] ty CicUniv.empty_ugraph in + prerr_endline (CicPp.ppterm term); + prerr_endline (CicPp.ppterm sort); + let tkeys = + if sort = Cic.Sort(Cic.Prop) then Universe.keys [] ty + else [] + in +*) + let tkeys = Universe.keys [] ty in + let index_cmd = + List.map + (fun key -> GrafiteAst.Index(HExtlib.dummy_floc,(Some key),uri)) + tkeys + in +(* prop filtering + let universe = + if sort = Cic.Sort(Cic.Prop) then + Universe.index_term_and_unfolded_term universe [] term ty + else universe +*) + let universe = Universe.index_term_and_unfolded_term universe [] term ty + in + let status = GrafiteTypes.add_moo_content index_cmd status in + (universe,status) + in + let uris_to_index = + if is_a_variant obj then [] + else (uris_for_inductive_type uri obj)@lemmas + in + let universe,status = + List.fold_left add_to_universe + (status.GrafiteTypes.universe,status) + uris_to_index + in + {status with + GrafiteTypes.objects = uri::status.GrafiteTypes.objects; + GrafiteTypes.universe = universe}, lemmas -let add_coercion ~basedir ~add_composites status uri = - let compounds = LibrarySync.add_coercion ~add_composites ~basedir uri in +let add_coercion refinement_toolkit ~add_composites status uri arity baseuri = + let compounds = + LibrarySync.add_coercion ~add_composites refinement_toolkit uri arity baseuri in {status with GrafiteTypes.coercions = uri :: status.GrafiteTypes.coercions}, compounds @@ -59,8 +127,8 @@ let time_travel ~present ~past = let coercions_to_remove = uri_list_diff present.GrafiteTypes.coercions past.GrafiteTypes.coercions in - List.iter (fun uri -> LibrarySync.remove_coercion uri) coercions_to_remove; - List.iter LibrarySync.remove_obj objs_to_remove + List.iter (fun uri -> LibrarySync.remove_coercion uri) coercions_to_remove; + List.iter LibrarySync.remove_obj objs_to_remove let init () = LibrarySync.remove_all_coercions (); @@ -71,4 +139,5 @@ let init () = options = GrafiteTypes.no_options; objects = []; coercions = []; + universe = Universe.empty; }