type system subtyping rules