# Inverse for the term "refinement”

In computer science there is a term "refinement". Refinement is a hierarchical relationship between two concepts. If B refines A, then the requirements of B are a superset of the requirements of A. Thus, the set of abstractions that model B are a subset of those that model A, i.e., every B is an A.

At the same time there is a term "lifting". It stands for finding a concept with least requirements to fit a particular algorithm.

The question is how to describe A in terms of B if B is a refinement of "A". Similar to ancestor vs. descendant.

My guess is "A is a lifting of B". But I'm not sure I can use "a lifting" in English.

-
The origin on Stackoverflow: stackoverflow.com/questions/16355303/… – Riga May 3 '13 at 15:29
Those who do understand the terms, understand that this is Too Localized. – Kris May 4 '13 at 5:57

Depending on the exact context, it may be appropriate to write A relaxes B or A is a relaxation of B to mean B refines A or B is a refinement of A.

-
Yes, this is an explanation, but I am seeking for a word that refers not to the properties of concepts but to concepts directly. – Riga May 3 '13 at 15:34
thanks! This makes sense. What do you think of my suggestion? – Riga May 3 '13 at 15:38
"A is a lifting of B" – Riga May 3 '13 at 15:38

According to the Generic Programming Glossary:

Refinement is a hierarchical relationship between two concepts. If B refines A, then the requirements of B are a superset of the requirements of A. Thus, the set of abstractions that model B are a subset of those that model A, i.e., every B is an A.

And in turn:

A model is a type or set of types that meets the requirements of a concept. An integer pointer is a model of the Input Iterator concept. "Model" can also be used as a verb to describe the relationship between a type or set of types and a concept, e.g., an adjacency list models the Graph concept.

So, according to standard usage, A models B.

As for lifting:

Lifting is the process by which the differences among multiple, concrete implementations of the same algorithm are abstracted away, producing a generic algorithm.

I don't think it's quite correct to say that the inverse of refinement is lifting, since lifting concrete implementations of A and B produces some new generic entity C.

So, as far as there is an inverse of refinement, it's model.

A models B; B is a refinement of A.

-
"Models" refers to types and not to concepts, so it is not the right term to use in the context of this question. In some more details a model is a specific implementation that realizes the requirements of the concept. – Dror May 4 '13 at 19:51
@Dror Read the definition of refinement again; the distinction you're trying to make isn't explicit in that definition, as I read it. – Gnawme May 4 '13 at 21:26
I still think (and as far as I know this is also the case) refinement refers to a relation between concepts, and model refers to the properties of types. Rereading the definition that you cite seems to support this understanding of mine. – Dror May 5 '13 at 7:52
@Gnawme, Dror is right. – Riga May 7 '13 at 7:17