"Christoph"  wrote
....
>
> class  A; end
> class AA < A; end
> class  AAA < AA; end
>
> class B ; end
> class BB < B; end
> class BBB < BB; end
>
>
> # 1
> def m(A x, B y; )
>   ..
> end
>
> # 2
> def    m( AA x, B y; )
>    ...
> end
>
> # 3
> def    m( A x, BB y; )
>    ...
> end
>
> a = AAA.new
> b = BBB.new
>
>
> m(a , b)

Ups - following the logic of my silly overload
convention (probably a nightmare for the parser)
this should have been
    m(a,b; )

Personally I would very much prefer something
completely orthogonal like

    <(a,b)>.m()  or  multi(a,b).m()


> # possible Specializations are  1,2,3
>
> #  maximal possible specializations are 2,3
>
> # lexicographic largest  among maximal
> # specializations is 2
>


/Christoph