Richard O'Keefe wrote:
On Nov 12, 2009, at 9:24 AM, Sean Leather wrote:
Is there a name for the following concept?
[Generalising from
    (Int, Char) -> (Char, Int)
    (Char, Int) -> (Int, Char)
 to    (x,    y  ) -> (y,   x   )]

It's the "least specific generalisation", also known as anti-unification.
(Because unification finds the most general specialisation.)
As far as I know, it originated in this paper:
Gordon D. Plotkin. A Note on Inductive Generalization. In B. Meltzer and D. Michie, editors, Machine Intelligence, volume 5, pages 153-163. Elsevier North-Holland, New York, 1970.

IANTT (I am not a type theorist) but...

If you're talking about supertypes and subtypes, then I think this can be classified as a "least upper bound". I.e. if there is a function that is used in both the first and second context provided, then one can infer that its constraints must satisfy both signatures. To then unify the signatures, construct a supertype which by definition both must satisfy. Eventually (when you know the constraints are fully saturated), you can then unify the supertype constraints by taking the least upper bound -- which, by contravariance, is the greatest lower bound of the input and the least upper bound of the output. The greatest lower bound of the inputs will enforce parametricity because the only common subtype of Int and Char is bottom. The least upper bound of the output is then trivial.

--S
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to