re-implement ascending? and friends, with doc and specs