Skip to content

Linear isomorphisms for convex cones #40367

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 9 commits into
base: develop
Choose a base branch
from

Conversation

orlitzky
Copy link
Contributor

@orlitzky orlitzky commented Jul 3, 2025

Implement linear isomorphism generation and testing for convex cones. Convex cones can be created in Sage with the Cone() function. These cones already have an is_isomorphic() method, but this tests a property that is relevant in toric geometry rather than the equivalence under an invertible linear map. The latter is more useful in optimization, in particular.

This contains a result on the automorphism group of a particular
polyhedral cone, soon to be cited in a new method for isomorphism
testing. The name is a bit long, but "GT2014" has already been
used... by me.
@orlitzky orlitzky marked this pull request as draft July 3, 2025 13:19
Copy link

github-actions bot commented Jul 3, 2025

Documentation preview for this PR (built with commit dd77872; changes) is ready! 🎉
This preview will update shortly after each push to this PR.

@orlitzky orlitzky force-pushed the linear-cone-isomorphism branch from 8290603 to 7a8e189 Compare July 3, 2025 15:32
orlitzky added 2 commits July 3, 2025 20:20
This is a respectable reference that mentions the decomposition of a
convex cone into its lineal (subspace) and non-lineal (pointed)
components. It will be cited in a forthcoming cone isomorphism method.
This paper contains a proof that automorphisms of pointed cones must
send extreme rays to extreme rays. The proof is also valid for
isomorphisms between two different cones and will be cited in a future
method for cone isomorphisms.
@orlitzky orlitzky force-pushed the linear-cone-isomorphism branch 3 times, most recently from 3948558 to bd7ab6b Compare July 4, 2025 04:27
@orlitzky orlitzky marked this pull request as ready for review July 4, 2025 04:27
orlitzky added 6 commits July 4, 2025 09:08
With the ultimate goal of reimplementing isomorphism testing for
convex cones, we add a new method to generate said isomorphisms. If
any are generated... then the cones are isomorphic.

This is based on the well-known decomposition of a closed convex cone
in to a sum of three convex cones:

  1. Its lineal part (the largest subspace contained in the cone)
  2. Its non-lineal part (the orthogonal complement to the lineal
     part)
  3. A trivial cone in a subspace orthogonal to the original cone (in
     the case where, say, the cone is 2d in a 3d space)

Generating isomorphisms for (1) and (3) are easy, because all we need
are vector space isomorphisms. A necessary condition for isomorphism
between cones that are both strictly convex is that extreme rays are
sent to extreme rays. And for a solid cone, there are enough extreme
rays to make any such map invertible. The cone in (2) satisfies both
of these conditions, so by decomposing two cones and matching up their
components, we are able to generate "all" ismorphisms between them (up
to some hand waving that has been documented in the ALGORITHM block.)
This is a new alternative to the is_isomorphic() method for convex
cones. The existing method was written with toric geometry in mind,
and is neither documented nor intended to capture the notion of
equivalence under invertible rational transformations.

The new method was implemented "from scratch," avoiding the fan
machinery, and works for all convex cones, not just strictly convex
ones. It should also be immune to the symmetry bug in Github issue
37957.
In the documentation of is_equivalent() and is_isomorphic(), there is
a note that mentions "three notions of equivalence" for convex cones.
Well, with the addition of is_linearly_isomorphic(), now there are
four. We update the existing note in both places, and then copy/paste
it into the docs for is_linearly_isomorphic() as well.

We also add SEEALSO blocks for is_equivalent() and is_isomorphic() to
match the one in is_linearly_isomorphic().
Now that is_linearly_isomorphic() is implemented, we add a SEEALSO
reference to it in linear_isomorphisms().
I think the SEEALSO block looks better if it comes after the OUTPUT
but before the ALGORITHM.
One of the max_angle() tests is running afoul of the new, stricter
limits for non-long tests. I wrote it, so I should probably fix it.
@orlitzky orlitzky force-pushed the linear-cone-isomorphism branch from bd7ab6b to dd77872 Compare July 4, 2025 13:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant