#19405: Add lyapunov_rank() method for polyhedral cones
-------------------------------------+-------------------------------------
Reporter: mjo | Owner:
Type: enhancement | Status: needs_review
Priority: major | Milestone: sage-6.10
Component: geometry | Resolution:
Keywords: | Merged in:
Authors: Michael Orlitzky | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
u/mjo/ticket/19405 | a193b815d8c6cfac86cbf3104f0eedbcb5d1f5bc
Dependencies: #19368 | Stopgaps:
-------------------------------------+-------------------------------------
Comment (by novoselt):
Replying to [comment:13 mjo]:
> 1. What exactly is the problem with the quotient? Is it that `M` and `N`
are different, so we don't think of the thing in `M` as being a subthing
of the thing in `N`? (This makes sense to me, I just didn't expect a
"sublattice" method to give me something in another lattice.)
Correct, elements of `M` can not be thought of as elements of `N` because
while these lattices are isomorphic there is no canonical isomorphism. The
reason for the (standard) name "sublattice" here is that a cone has two
canonical lattices associated to it - characters/one-dimensional
representations and one-parameter subgroups. Neither comes with a choice
of basis.
> 2. I borrowed the quotient terminology from `strict_quotient` where we
go through the back door of `linear_subspace()` -- why isn't that cheating
too, since it drops down to vector spaces?
It is a bit of a cheating in the sense that the result should live in a
quotient lattice of N. But since they (quotient lattices) were not
implemented before and still lack some features the result is returned in
a generic lattice. However, this is "code cheating" - I am performing a
mathematically allowed operation in a way possible with current code.
Taking quotient of N by sublattice of M is doing a mathematically illegal
operation in a way that your (or perhaps rather mine ;-)) code tolerates.
> 3. Sage will let me take the lattice quotient of `N` and a sublattice
`M`. Isn't it supposed to stop me? The docstring says it checks for a
valid sublattice. Here's an example:
>
> {{{
> sage: K = Cone([(1,0,0),(0,1,0)])
> sage: K.lattice()
> 3-d lattice N
> sage: K.orthogonal_sublattice()
> Sublattice <M(0, 0, 1)>
> sage: K.lattice().quotient(K.orthogonal_sublattice())
> 2-d lattice, quotient of 3-d lattice N by Free module of degree 3 and
rank 1 over Integer Ring
> Echelon basis matrix:
> [0 0 1]
> }}}
It is supposed to stop you, especially since documentation claims it. You
have discovered another bug!
> 4. If the only problem is the `M`/`N` distinction, can I use
`sublattice_complement()` instead of `orthogonal_complement()`? I think
this gives me the correct subthing:
>
> {{{
> sage: K.sublattice_complement()
> Sublattice <N(0, 0, 1)>
> }}}
>
> Could I now consider `K.lattice().quotient(K.sublattice_complement())` a
true quotient?
It is a true quotient in the sense that it is a mathematically legal
operation, however this is not what you want. What you want is just
`K.sublattice()` - get coordinates of rays of `K` in the basis of this
sublattice and return a new cone in the generic lattice of this dimension
generated by those coordinates. Something like
{{{
N_K = K.sublattice()
L = ToricLattice(N_K.dimension(), <name tweaks>)
Cone([L(N_K.coordinates(r)) for r in K], check=False)
}}}
--
Ticket URL: <http://trac.sagemath.org/ticket/19405#comment:14>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" 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-trac.
For more options, visit https://groups.google.com/d/optout.