+
+let rec ppmetasenv ~subst metasenv = function
+ | [] -> ""
+ | (i,(name, ctx, ty)) :: tl ->
+ let name = match name with Some n -> "(\""^n^"\")" | _ -> "" in
+ ppcontext ~sep:"; " ~subst ~metasenv ctx ^
+ " ⊢ ?"^string_of_int i^name^" : " ^
+ ppterm ~metasenv ~subst ~context:ctx ty ^ "\n" ^
+ ppmetasenv ~subst metasenv tl
+;;
+
+let ppmetasenv ~subst metasenv = ppmetasenv ~subst metasenv metasenv;;
+
+let rec ppsubst ~subst ~metasenv = function
+ | [] -> ""
+ | (i,(name, ctx, t, ty)) :: tl ->
+
+ let name = match name with Some n -> "("^n^")" | _ -> "" in
+ ppcontext ~sep:"; " ~subst ~metasenv ctx ^
+ " ⊢ ?"^string_of_int i^name^" := " ^
+ ppterm ~metasenv ~subst ~context:ctx t ^ " : " ^
+ ppterm ~metasenv ~subst ~context:ctx ty ^ "\n" ^
+ ppsubst ~subst ~metasenv tl
+;;
+
+let ppsubst ~metasenv subst = ppsubst ~metasenv ~subst subst;;
+
+let _ = NCicSubstitution.set_ppterm ppterm;;
+