On Mon, Nov 12, 2012 at 05:03:58AM +0000, Dima Pasechnik wrote:
> On 2012-11-11, Nathann Cohen <nathann.co...@gmail.com> wrote:
> > I spent many hours fighting with Posets under Sage. I enjoyed it a lot, but
> > I can already tell that it gets on Florent's and Nicolas' nerves, and so I
> > was thinking of whether I should put an end to it. For their sake.
> >
> > Here's the problem. With comments.
> >
> > -------------------------------
> > Building the poset from a DiGraph defined on integers :
> > sage: g = DiGraph([(1,2),(1,3),(2,4),(3,4)])
> > sage: p = Poset(g)
> >
> > Is 3 in the poset ?
> >
> > sage: 3 in p
> > True
> >
> > Of course it is !
> >
> > sage: list(p)
> > [1, 2, 3, 4]
> > sage: 3 in list(p)
> > False
> >
> > Not it is not ! So what the hell is this list [1,2,3,4] that we get as a
> > result to list(p) ?
> >
> > sage: map(type,list(p))
> > [<class
> > 'sage.combinat.posets.elements.FinitePoset_with_category.element_class'>,
> > ...
> > 'sage.combinat.posets.elements.FinitePoset_with_category.element_class'>]
> >
> > O_O;;;
> >
> > sage: p.cover_relations()
> > [[1, 2], [1, 3], [2, 4], [3, 4]]
> > sage: [1,3] in p.cover_relations()
> > False
> > sage: (1,3) in p.cover_relations()
> > False
> >
> > And of course :
> >
> > sage: p.hasse_diagraph() == g
> > False
> > ------------------------
> >
> > WELL. I personally consider that this behaviour is totally crazy, and I
> > often say so (very loud, and very frequently. Just come eat with us anyday
> > at lunch and I will probably complain about that, or about LaTeX). This
> > being said, I also heard that it may possibly make sense in a very sick
> > logic, and that the correction of some code may actually depend on that.
> >
> > I personally think that having this as the default behaviour of Poset is
> > *madness*. I personally *ONLY* use Posets with he flag "facade = True" when
> > I do not forget it, and lose half an hour when I do forget it. What would
> > you think of making it the default behaviour of Poset ? This way, normal
> > people could use a Poset without having to know what a facade is. Without
> > having to hear about parents, elements, the .value() method and all.
> > I mean. Why the hell should this stay the default behaviour ?
> 
> I agree that this looks very odd. A poset is a pair (set, binary
> relation), and one would fully expect that list() will produce
> the list of the elements in the set ordered in a way preserving
> the partial order...

First thing: for those who want to know more on what a facade is:

    sage: S = Sets()
    sage: S.Facade?

Now, just to put this in perspective. I think many people would find
the following madness if the end result was 3 and not 0:

    sage: G = IntegerModRing(3)
    sage: G.list()
    [0, 1, 2]
    sage: a,b,c=G.list()
    sage: b+c
    0

In the above use case, you want the element of G, as returned by G, to
be aware that they live in G, so that arithmetic get done
accordingly. Similarly, for posets, there are use cases where one
wants a<b to compare a and b in the poset.

All of this to say that both facade and non facade posets are useful.
Now there is the question of the default value for this option. I
think we all agree (including the original poset authors; facades did
not exist back then), that facade=True is the natural default as this
is the most common use case.

The single remaining question is whether the issue is important enough
to break backward compatibility (with an appropriate transition period
of course).

> Actually, I tried googling poset+facade, and all the maths hits are
> Sage, with an exception of a dissertation on posets, where the only
> place the word "facade" is used is the following quote:
>
>   It turns out that an eerie type of chaos
>   can lurk just behind a facade of order
>   and yet, deep inside the chaos
>   lurks an even eerier type of order.
>                                   D. Hofstadter
> 
> Thus indeed, we should not show "an eerie type of chaos",
> unless a user expicitly asks for it...

:-)

Cheers,
                                Nicolas
--
Nicolas M. ThiƩry "Isil" <nthi...@users.sf.net>
http://Nicolas.Thiery.name/

-- 
You received this message because you are subscribed to the Google Groups 
"sage-combinat-devel" group.
To post to this group, send email to sage-combinat-devel@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.

Reply via email to