X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic%2FcicUtil.ml;h=5a64429a388da80c174e5ca3bfbce28a451f5ad5;hb=ccca8f161bcbe57b58e651656a4a825c5227abf2;hp=5e0d6d4a94869989f6b9012a06d070caa2672413;hpb=b24d13c4dcc96a204951857ddfa18c5ded4cecd0;p=helm.git diff --git a/helm/ocaml/cic/cicUtil.ml b/helm/ocaml/cic/cicUtil.ml index 5e0d6d4a9..5a64429a3 100644 --- a/helm/ocaml/cic/cicUtil.ml +++ b/helm/ocaml/cic/cicUtil.ml @@ -23,10 +23,11 @@ * http://helm.cs.unibo.it/ *) +open Printf + exception Meta_not_found of int exception Subst_not_found of int - let lookup_meta index metasenv = try List.find (fun (index', _, _) -> index = index') metasenv @@ -160,10 +161,21 @@ let term_of_uri s = | Failure _ | Not_found -> raise (UriManager.IllFormedUri s) +let uri_of_term = function + | Cic.Const (uri, []) + | Cic.Var (uri, []) -> UriManager.string_of_uri uri + | Cic.MutInd (baseuri, tyno, []) -> + sprintf "%s#xpointer(1/%d)" (UriManager.string_of_uri baseuri) (tyno + 1) + | Cic.MutConstruct (baseuri, tyno, consno, []) -> + sprintf "%s#xpointer(1/%d/%d)" (UriManager.string_of_uri baseuri) + (tyno + 1) consno + | _ -> raise (Invalid_argument "uri_of_term") + let select ~term ~context = let rec aux context term = match (context, term) with | Cic.Implicit (Some `Hole), t -> [t] + | Cic.Implicit None,_ -> [] | Cic.Meta (_, ctxt1), Cic.Meta (_, ctxt2) -> List.concat (List.map2 @@ -253,3 +265,17 @@ let rec strip_prods n = function | Cic.Prod (_, _, tgt) when n > 0 -> strip_prods (n-1) tgt | _ -> failwith "not enough prods" +let params_of_obj = function + | Cic.Constant (_, _, _, params, _) + | Cic.Variable (_, _, _, params, _) + | Cic.CurrentProof (_, _, _, _, params, _) + | Cic.InductiveDefinition (_, params, _, _) -> + params + +let attributes_of_obj = function + | Cic.Constant (_, _, _, _, attributes) + | Cic.Variable (_, _, _, _, attributes) + | Cic.CurrentProof (_, _, _, _, _, attributes) + | Cic.InductiveDefinition (_, _, _, attributes) -> + attributes +