let pp fmt s =
    let name i = Format.fprintf fmt "\n%s:" (Th.to_string i) in
      if not(U.S.is_empty s.u) then
        (name Th.u; U.S.pp fmt s.u);
      if not(La.S.is_empty s.la) then
        (let name = Th.to_string Th.la in
           Format.fprintf fmt "\n%s(r):" name; La.pp La.R fmt s.la;
           Format.fprintf fmt "\n%s(t):" name; La.pp La.T fmt s.la);
      if not(S.is_empty s.nl) then
        (name Th.nl; S.pp fmt s.nl);
      if not(S.is_empty s.p) then
        (name Th.p; S.pp fmt s.p);
      if not(S.is_empty s.cop) then
        (name Th.cop; S.pp fmt s.cop);
      if not(S.is_empty s.cl) then
        (name Th.app; S.pp fmt s.cl);
      if not(S.is_empty s.arr) then
        (name Th.arr; S.pp fmt s.arr);
      if not(S.is_empty s.set) then
        (name Th.set; S.pp fmt s.set);
      if not(S.is_empty s.bv) then
        (name Th.bv; S.pp fmt s.bv)