-let pp_attrs out a =
- let map = function
- | E.Name (s, true) -> out (P.sprintf "%s;" s)
- | E.Name (s, false) -> out (P.sprintf "~%s;" s)
- | E.Apix i -> out (P.sprintf "+%i;" i)
- | E.Mark i -> out (P.sprintf "@%i;" i)
- | E.Meta _ -> ()
- | E.Info _ -> ()
- in
- List.iter map a
-
-let rec pp_term out = function
- | D.TSort (a, l) -> pp_attrs out a; out (P.sprintf "*%u" l)
- | D.TLRef (a, i ) -> pp_attrs out a; out (P.sprintf "#%u" i)
- | D.TGRef (a, u) -> pp_attrs out a; out (P.sprintf "$")
- | D.TCast (a, x, y) -> pp_attrs out a; out "<"; pp_term out x; out ">."; pp_term out y
- | D.TAppl (a, x, y) -> pp_attrs out a; out "("; pp_term out x; out ")."; pp_term out y
- | D.TBind (a, x, y) -> pp_attrs out a; pp_bind out x; out "."; pp_term out y
- | D.TProj (a, x, y) -> pp_attrs out a; out "{"; pp_lenv out x; out "}."; pp_term out y
-
-and pp_bind out = function
- | D.Abst (n, x) ->
- out "[:"; pp_term out x; out "]";
- if N.is_infinite n then () else out (N.to_string n)
- | D.Abbr x -> out "[="; pp_term out x; out "]";
- | D.Void -> out "[]"
-
-and pp_lenv out = function
- | D.ESort -> ()
- | D.EBind (x, a, y) -> pp_lenv out x; pp_attrs out a; pp_bind out y
- | D.EAppl (x, a, y) -> pp_lenv out x; out "("; pp_term out y; out ")"
- | D.EProj (x, a, y) -> pp_lenv out x; out "{"; pp_lenv out y; out "}"
+let pp_b_attrs out a =
+ let f s b = if b then out (KP.sprintf "%s;" s) else out (KP.sprintf "~%s;" s) in
+ E.name ignore f a
+
+let pp_n_attrs out a =
+ out (KP.sprintf "+%i;" a.E.n_apix)
+
+let pp_state out x = if x then out "^"
+
+let rec pp_term out st = function
+ | D.TSort k -> out (KP.sprintf "*%u" k)
+ | D.TLRef (a, i) -> pp_n_attrs out a; out (KP.sprintf "#%u" i)
+ | D.TGRef (a, u) -> pp_n_attrs out a; out (KP.sprintf "$")
+ | D.TCast (u, t) -> out "<"; pp_term out st u; out ">."; pp_term out st t
+ | D.TAppl (_, u, t) -> out "("; pp_term out st u; out ")."; pp_term out st t
+ | D.TBind (y, u, t) -> pp_b_attrs out y; pp_bind out st u; out "."; pp_term out st t
+ | D.TProj (u, t) -> out "{"; pp_lenv out st u; out "}."; pp_term out st t
+
+and pp_bind out st = function
+ | D.Abst (r, n, u) ->
+ out "[:"; pp_term out st u; out "]"; pp_state out r; out (N.to_string st n); out " "
+ | D.Abbr u -> out "[="; pp_term out st u; out "] ";
+ | D.Void -> out "[] "
+
+and pp_lenv out st = function
+ | D.ESort -> ()
+ | D.EBind (u, a, y, t) -> pp_lenv out st u; pp_b_attrs out y; pp_n_attrs out a; pp_bind out st t
+ | D.EAppl (u, _, t) -> pp_lenv out st u; out "("; pp_term out st t; out ") "
+ | D.EProj (u, t) -> pp_lenv out st u; out "{"; pp_lenv out st t; out "} "