On Monday, December 1, 2014 12:49:27 PM UTC-8, Simon King wrote:
>
>
> Hmm. Sounds like a mess. But I do think one should have a general
> mechanism ("UniqueRepresentationOptional" or so) with which one can
> choose by an optional argument whether caching and comparison by
> identity should be used or not.
>
> I'm not so sure about that. UniqueRepresentation isn't so much a caching
tool as it is a semantic one. It's the WithEqualityById that's the
important ingredient, and to make that palatable one provides cached
construction based on hashing&equality of the construction parameters
(leading to the CachedRepresentation part). Being able to change behaviour
of an object as fundamental as its hashing and equality with a simple flag
seems like a bad idea to me. It should be very easy to distinguish what
kind of version of the object you're facing. I'd expect to be able to tell
this from the type.
So I think the design challenge here is to come up with a workable
architecture where you can have a fast POset as an element of the *parent*
"posets over/of type (qualified so that equality/isomorphy testing can be
defined properly)" as well as a full-scale parent for heavy-duty
computation in a fixed poset (is there such a thing?), with full support of
coercing elements between different posets (again do people actually need
that?), and a way to construct the second out of the first (and possibly
the other way around too).
In algebraic number theory this comes up with, say, fractional ideals. They
are submodules of a number field, so in that respect can be considered full
parents. But if you're doing ideal arithmetic you wouldn't want to treat
them that way: they're elements of the ideal group, and you represent them
by matrices or tuples of generators. Anything heavier than that is waste of
resources.
In fact, in that setting there's hardly any demand for having ideals as
full parents. You may want to check if an element lies in an ideal, but you
can support "in" on things that aren't parents. You probably do want to be
ably to construct quotients by integral ideals and localizations etc.
(probably as full parents), but again for that you don't need *ideals* to
be parents.
The easy solution for Nathann and Jori for now is just to write their
high-performance code in terms of primitives: a tuple consisting of the
base set and some suitable description of the PO (a set of generating a<=b
pair or so?). Such a thing would be as light as possible. and can trivially
be wrapped in a fancier interface should that ever be necessary.
The obvious answer to the complaint "this data structure is too heavy for
me" is "don't use it then". It might just be that they are discovering the
current POset is too heavy to be useful in many settings, in which case a
lighter alternative might be nice to have. And since this sounds like a
likely scenario in many contexts, it would be nice to have some design
ideas that help in accomplishing this.
--
You received this message because you are subscribed to the Google Groups
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.