Local Notation inlined_sub_rect :=
  (fun K K_S u => let (x, Px) as u return K u := u in K_S x Px).Local Notation inlined_new_rect :=
  (fun K K_S u => let (x) as u return K u := u in K_S x).Definition NewType T U v c Urec :=
  let Urec' P IH := Urec P (fun x : T => IH x isT : P _) in
  SubType U v (fun x _ => c x) Urec'.Definition innew T nT x := @Sub T predT nT x (erefl true).

(* Specifications: *)
Lemma innew_val T nT : cancel val (@innew T nT).