Type-based termination of recursive definitions and constructor subtyping in typed lambda calculi See original record