axiom-math
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

## [Axiom-math] Re: [Axiom-mail] Lexicographic order

 From: Jens Axel Søgaard Subject: [Axiom-math] Re: [Axiom-mail] Lexicographic order Date: Mon, 29 Aug 2005 19:34:10 +0200 User-agent: Mozilla Thunderbird 1.0.2 (Windows/20050317)

```Hi Martin,

> Although I'm not 100% sure what lexorder? ought to do exactly, you
> might want to notice the following:
>
> the first matching type the interpreter finds for [x,y,z] is
>
> (13) -> [x,y,z]
>
>    (13)  [x,y,z]
```
> Type: List OrderedVariableList [x,y,z]
```>
> which means that in sort([x,z,y]) you are using the order imposed by
> OrderedVariableList [x,y,z], which is z < y < x.

Ah!

> If you say
>
> sort([x,z,y]::List Symbol), you will get the expected output.

That worked.

> I'm not totally sure how you can find out what ordering a domain uses.
> But very likely, if its name doesn't contain something like "Ordered",
> it is the usual lexicographic order.

Part of my problem was that I had to polynomials, which might be belong
to polynomial rings over different variables. I am probably not going
to use lexorder?, I am just trying to get used to the Axiom way of
```
doing things. Fortunately it feels very Lispy to me (if it weren't for the fact that tail recursion wasn't supported, I'd had said Schemy).
```
Lexorder examines the difference of exponent vectors of the multivariate
polynomials p and q. If the leftmost non-zero entry is positive, then p>q.

lexorder?(p,q) ==
if  empty?(variables(p))
then return ~empty?(variables(q))
else
vars := sort(members(union(set(variables(p)),
set(variables(q))))::List Symbol)
a := vector(members(degree( p::DMP(vars,?) )))
b := vector(members(degree( q::DMP(vars,?) )))
n := select( x +-> ~zero?(x), members(a-b))
if empty?(n)
then return false
else return positive?(first(n))

--
Jens Axel Søgaard

```

reply via email to

 [Prev in Thread] Current Thread [Next in Thread]