Thank you again!

Yeah, I didn't mean to send a private mail, my intention was to send a reply
to the list, but I must have clicked somewhere stupid on my gmail.

That sure helped me a lot, now I suppose I understand how IndexedElements
work and can use it with my mind at ease!

Thanks,

Gabriel,

On Mon, Apr 11, 2011 at 8:12 PM, Ralf Hemmecke <[email protected]> wrote:

> Are you sure you wanted to send a private email? I very much prefer if the
> discussion stays public.
>
>  So, I used Axiom
>>
>
> As you have certainly realized, I'm a user/developer of FriCAS, a fork of
> Axiom. But all I'm saying probably also applies to Axiom. But if I point you
> to code, I'll point you to FriCAS code, simply, because I am more familiar
> with it than with the Axiom code base.
>
>
>  to try to manipulate some objects in an
>> AbelianOrderedMonoidSup, but I can't seem to find a way. Let me show you
>> my
>> steps (they don't differ from OP, but anyways):
>>
>
>  ls : List Symbol := [x]
>> V := OVAR(ls)
>> E := IndexedExponents(V)
>>
>
> Let's first look into the code.
>
> The implementation of IndexedExponents inherits most of its implementation
> from IndexedDirectProductOrderedAbelianMonoidSup.
>
>
> https://github.com/hemmecke/fricas-svn/blob/master/src/algebra/multpoly.spad.pamphlet#L820
>
> This inherits from IndexedDirectProductOrderedAbelianMonoid.
>
>
> https://github.com/hemmecke/fricas-svn/blob/master/src/algebra/indexedp.spad.pamphlet#L296
>
> etc. I hope you know how to use grep. It's a bit tedious, but you can learn
> a lot from the code.
>
> OK, you probably want a simpler method. Take hyperdoc browse and enter
> IndexedExponents. Click on Constructors. Then click Operations ->
> Signatures.
> Or simply type
>
>  )show E
>
> after you have defined E like above.
>
> Now, as I said in my last mail about "Abelian", the Monoid E is additively
> written. In hyperdoc you see +:(%,%)->%, but no *:(%,%)->%.
>
> And sample:()->% is a function that returns an element of E. It is nowhere
> said that it returns a random element. So if it returns 1
>
> Showing 1 is a bit misleading, since it rather behaves like zero.
>
> (5) -> e:E :=sample()$E
>
>   (5)  1
>        Type: IndexedExponents(OrderedVariableList([x]))
> (6) -> e+e
>
>   (6)  1
>        Type: IndexedExponents(OrderedVariableList([x]))
>
>
>  Ok, now, what I expect to see from what I learned is that E is a monoid of
>> powers of x, possibly with 1 being the "highest" term of the monoid.
>>
>
> I'd bet that 1 is rather the "lowest" term. That depends on how you read
> a<b.
>
>
>  And I can't use 'x' to make an object, or multiply by x, or multiply 1 by
>> a
>> constant... can't seem to use or know what are the objects in the
>> monoid...
>>
>
> If you just say
>
>  x*e
>
> that will of course not work. Why? Because, the x you give here is of type
> Symbol. Do you find a function *: (Symbol, %) -> % in the list from ")show
> E"? No. So x*e can only return an error.
>
> How to construct the right x? Well, the x you are looking for is not the
> symbol x, but rather the monomial x^1 from E. And there is a function
>
>  monomial : (NonNegativeInteger,OrderedVariableList([x])) -> %
>
> The first argument is the power and the second is an element of V.
> How to get an element of V? V has only 1 element, so lets
>
> )show V
>  OrderedVariableList([x]) is a domain constructor.
>  Abbreviation for OrderedVariableList is OVAR
>  This constructor is not exposed in this frame.
> ------------------------------- Operations --------------------------------
>
>  ?<? : (%,%) -> Boolean                ?<=? : (%,%) -> Boolean
>  ?=? : (%,%) -> Boolean                ?>? : (%,%) -> Boolean
>  ?>=? : (%,%) -> Boolean               coerce : % -> OutputForm
>  convert : % -> InputForm              convert : % -> Pattern(Float)
>  convert : % -> Pattern(Integer)       convert : % -> Symbol
>  enumerate : () -> List(%)             hash : % -> SingleInteger
>  index : PositiveInteger -> %          latex : % -> String
>  lookup : % -> PositiveInteger         max : (%,%) -> %
>  min : (%,%) -> %                      random : () -> %
>  size : () -> NonNegativeInteger       smaller? : (%,%) -> Boolean
>  ?~=? : (%,%) -> Boolean
>  variable : Symbol -> Union(%,"failed")
>
> I'm sure you try
>
> (7) -> v:V :=index 1
>
>   (7)  x
>                         Type: OrderedVariableList([x])
>
> first. Voila, there is your x, now stored in the variable v. Oh, but it's
> of type V, not E!!!
> OK, we use
>
> (10) -> z: E := monomial(1,v)
>
>   (10)  x
>            Type: IndexedExponents(OrderedVariableList([x]))
>
> and have the x we were looking for (stored in the variable z).
> And now we can do monoid operations with this x.
>
> (12) -> z+z
>
>          2
>   (12)  x
>           Type: IndexedExponents(OrderedVariableList([x]))
>
> (14) -> 3*z
>
>          3
>   (14)  x
>            Type: IndexedExponents(OrderedVariableList([x]))
>
> I know this additive structure written in a multiplicative form is a bit
> confusing, but that's the way it is currently. Some long time ago, wrote my
> own polynomial domain with the corresponding monoid written
> multiplicatively. But here you have to live with it until somebody comes and
> changes it to something better.
>
> Does that help you?
>
> Ralf
>
> PS: If you like to reply, please do it on the mailing list. Other people
> might benefit from it. You have my permission to use the text from above.
>
> PPS: You should also try to use a sandbox on the axiomwiki
> http://axiom-wiki.newsynthesis.org/FrontPage
> Just replace "FrontPage" with "SandboxYourFancyTitle" in order to create a
> new page.
>
>
_______________________________________________
Axiom-mail mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/axiom-mail

Reply via email to