[with mostly up-to-date semantics, but this year I gave up on approximating (≲), which is \refines in the suite, in the language itself; the following seems to be more productive (for technical reasons related to using an implementation-specific total order):
FNull <= f && f <= f NB. <= is discrete
where equality of closures is pessimistic, based on lexical source and equality of the captured environments, so: f <= g ==> f \refines g
f \refines g <=> f`x ~ g`x
using (`) as application]it may help to read chapter 2 of https://www.cs.utoronto.ca/~hehner/aPToP/ for the basic data structure inspiration; another alternate syntax would be to stick with his (for data; this all grew out of wishing to treat functions very differently)
I've also been inspired by the Boom Hierarchy (in terms of trying to put laws, especially distributive/module laws, first) but as my areas of interest don't run to commercial proggys, I haven't found a use for the bag level. [Lamport stuttering, otoh, suggests that ordered but absorbing would be a useful abstraction — and I think that'd easily be buildable on top of this basis]
if I can remember out my creds for oortcloud, and it would help, I can make available a browser-based precedence tool that translates expressions in the JUNK syntax into their abstract trees.