Boolean-algebraic subtyping