X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Fsoftware%2Fcomponents%2Fng_kernel%2FnReference.ml;h=81a08af4e6bc3037ce24ebc2dac8290c9163af23;hb=6c69642637b666508e22355a81d16d92576b1617;hp=9d9ed88a6a4098b18c446d530bade36934e8171f;hpb=05e05dd130ec57395615de286ee50c6729d226ac;p=helm.git diff --git a/helm/software/components/ng_kernel/nReference.ml b/helm/software/components/ng_kernel/nReference.ml index 9d9ed88a6..81a08af4e 100644 --- a/helm/software/components/ng_kernel/nReference.ml +++ b/helm/software/components/ng_kernel/nReference.ml @@ -30,7 +30,7 @@ type spec = | Def | Fix of int * int (* fixno, recparamno *) | CoFix of int - | Ind of int + | Ind of bool * int (* inductive, indtyno *) | Con of int * int (* indtyno, constrno *) type reference = Ref of int * NUri.uri * spec @@ -59,11 +59,9 @@ let set_of_reference = ref MapStringsToReference.empty;; *) let uri_suffix_of_ref_suffix = function - | "dec" - | "def" -> "con" - | "ind" - | "con" -> "ind" - | _ -> assert false + | "dec" | "fix" | "cfx" | "def" -> "con" + | "ind" | "con" -> "ind" + | x -> prerr_endline (x ^ " not a valid suffix"); assert false ;; let reference_of_string = @@ -76,7 +74,7 @@ let reference_of_string = i,j in let get1 s dot = - let i = int_of_string (String.sub s (dot+5) (String.length s-1)) in + let i = int_of_string (String.sub s (dot+5) (String.length s-1-dot-5)) in i in fun s -> @@ -93,7 +91,7 @@ fun s -> | "def" -> Ref (c (), u, Def) | "fix" -> let i,j = get2 s dot in Ref (c (), u, Fix (i,j)) | "cfx" -> let i = get1 s dot in Ref (c (), u, CoFix (i)) - | "ind" -> let i = get1 s dot in Ref (c (), u, Ind (i)) + | "ind" -> let b,i = get2 s dot in Ref (c (), u, Ind (b=1,i)) | "con" -> let i,j = get2 s dot in Ref (c (), u, Con (i,j)) | _ -> raise Not_found with Not_found -> raise (IllFormedReference (lazy s)) @@ -111,13 +109,32 @@ let string_of_reference (Ref (_,u,indinfo)) = | Def -> s2 ^ ".def" | Fix (i,j) -> s2 ^ ".fix(" ^ string_of_int i ^ "," ^ string_of_int j ^ ")" | CoFix i -> s2 ^ ".cfx(" ^ string_of_int i ^ ")" - | Ind i -> s2 ^ ".ind(" ^ string_of_int i ^ ")" + | Ind (b,i)->s2 ^".ind(" ^(if b then "1" else "0")^ "," ^ string_of_int i ^")" | Con (i,j) -> s2 ^ ".con(" ^ string_of_int i ^ "," ^ string_of_int j ^ ")" ;; +let mk_constructor j = function + | Ref (d, u, Ind (_,i)) -> + reference_of_string (string_of_reference (Ref (d, u, Con (i,j)))) + | _ -> assert false +;; + +let mk_fix i j = function + | Ref (d, u, Fix _) -> + reference_of_string (string_of_reference (Ref (d, u, Fix (i,j)))) + | _ -> assert false +;; + +let mk_cofix i = function + | Ref (d, u, CoFix _) -> + reference_of_string (string_of_reference (Ref (d, u, CoFix i))) + | _ -> assert false +;; + let reference_of_ouri u indinfo = let u = NUri.nuri_of_ouri u in - reference_of_string (string_of_reference (Ref (~-1,u,indinfo))) + reference_of_string (string_of_reference (Ref (max_int,u,indinfo))) ;; let ouri_of_reference (Ref (_,u,_)) = NUri.ouri_of_nuri u;; +