o_DefinitionsAtOrBelow

open override fun o_DefinitionsAtOrBelow(self: AvailObject, argRestrictions: List<TypeRestriction>): List<A_Definition>

Look up all method definitions that could match arguments satisfying the given TypeRestrictions. This should return the definitions that could be invoked at runtime at a call site with the given restrictions. This set is subject to change as new methods and types are created. If a restriction and the corresponding argument type of a definition have no possible intersection except bottom (⊥), then disallow the definition (it could never actually be invoked because bottom is uninstantiable). Answer a list of method definitions.

Don't do coverage analysis yet (i.e., determining if one method would always override a strictly more abstract method). We can do that some other day.