]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic/cicUtil.ml
- handles about:* uris in cicBrowser
[helm.git] / helm / ocaml / cic / cicUtil.ml
index 5e0d6d4a94869989f6b9012a06d070caa2672413..5a64429a388da80c174e5ca3bfbce28a451f5ad5 100644 (file)
  * 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
+