+ | Ind (b,i,l)->s2 ^".ind(" ^(if b then "1" else "0")^ "," ^ string_of_int i ^
+ "," ^ string_of_int l ^ ")"
+ | Con (i,j,l) -> s2 ^ ".con(" ^ string_of_int i ^ "," ^ string_of_int j ^
+ "," ^ string_of_int l ^ ")"
+;;
+
+let mk_constructor j = function
+ | Ref (u, Ind (_,i,l)) ->
+ reference_of_string (string_of_reference (Ref (u, Con (i,j,l))))
+ | r ->
+ raise (IllFormedReference (lazy ("NON INDUCTIVE TYPE REFERENCE: " ^
+ string_of_reference r)));
+;;
+let mk_indty b = function
+ | Ref (u, Con (i,_,l)) ->
+ reference_of_string (string_of_reference (Ref (u, Ind (b,i,l))))
+ | r ->
+ raise (IllFormedReference (lazy
+ ("NON INDUCTIVE TYPE CONSTRUCTOR REFERENCE: " ^ string_of_reference r)));
+;;
+
+let mk_fix i j = function
+ | Ref (u, Fix (_,_,h)) ->
+ reference_of_string (string_of_reference (Ref (u, Fix (i,j,h))))
+ | _ -> assert false
+;;
+
+let mk_cofix i = function
+ | Ref (u, CoFix _) ->
+ reference_of_string (string_of_reference (Ref (u, CoFix i)))
+ | _ -> assert false