The idea of supersumption may solve some common OO problems.
We’ve been doing training in Semantics and Description Logics lately, and have decided it’s worth emphasizing the concept of supersumption. Of course, supersumption is nothing but the inverse of subsumption: that is, if we say A subsumes B, then we have also said B supersumes A. But the reason we’re finding it worth calling out the difference is because of a mindset that many of our students (and myself) bring to the classroom. If you’ve been brought up with Object Oriented modeling, you naturally draw a parallel between subsumption and subclassing (or, even better, subtyping).
The analogy is close enough that you can mostly find your way around in this aspect of semantics. But we Object Oriented folks have a blind spot, and here’s where it shows up. In OO if you imported a library, you might subtype some of the classes you found in your library for your use in a particular project (or you might use them as is).
But, it would never occur to you to supertype a class that you got from somewhere else: you would be virtually assured of breaking it. But in semantics this is routine. Let’s say you’re designing an ontology for contracting, and you want to have a concept of “Party” (as in party to a contract). You may be importing another ontology with the concept of Person that you’d like to use. For some people, it’s an unnatural act to say that Person subsumes Party (because it seems like you are redefining the external sources definition of Person by making it a subtype of Party without their concept). You’re not really redefining someone else’s concept (except in your own local use).
To get around this blind spot, we’ve found it useful to say that your new concept “Party” supersumes the imported “Person.” And this seems to make it easier to bring this pattern to mind. I did a quick Google search and found 400,000 references for subsumption, and only 32 for supersumption. Must be a point of view thing.