Skip to content
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

Make CombinatorialPolyhedron an element class, define morphisms of combinatorial polyhedral sets #31803

Open
mkoeppe opened this issue May 9, 2021 · 29 comments

Comments

@mkoeppe
Copy link
Member

mkoeppe commented May 9, 2021

... of a parent class CombinatorialPolyhedra in a new category of CombinatorialPolyhedralSets. A parent is defined by (possibly infinite) sets of allowed vertices and facets; every element's set of vertices and facets is a subset of these.

Morphisms in the category:

  • permutations of the Vrep
  • permutations of the Hrep
  • relabelings of the Vrep
  • relabelings of the Hrep
  • degenerations.

This setup of element/parent/category is parallel to geometric polyhedra: Polyhedron/Polyhedra/PolyhedralSets.

Assigning coordinates in QQ^3 to labeled vertices then defines a morphism from CombinatorialPolyhedra(vertices, facets) to Polyhedra(QQ, 3).

CC: @kliem @jplab @tscrim @jhpalmieri @yuan-zhou

Component: geometry

Author: Matthias Koeppe

Branch/Commit: u/mkoeppe/make_combinatorialpolyhedron_an_element_class @ 0a15b46

Issue created by migration from https://trac.sagemath.org/ticket/31803

@mkoeppe mkoeppe added this to the sage-9.4 milestone May 9, 2021
@mkoeppe
Copy link
Member Author

mkoeppe commented May 9, 2021

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 9, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

60f3ddbCombinatorialPolyhedra: New parent class, use it to make CombinatorialPolyhedron an element class

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 9, 2021

Commit: 60f3ddb

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 9, 2021

Changed commit from 60f3ddb to 4380cd0

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 9, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

4380cd0src/sage/geometry/polyhedron/combinatorial_polyhedron/parent.py: Add missing imports

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 9, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

67d1e89CombinatorialPolyhedralSets: Add element methods dim/dimension, subcategory Finite with parent method dimension
80026c2PolyhedralSets: Make it a subcategory of CombinatorialPolyhedralSets

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 9, 2021

Changed commit from 4380cd0 to 80026c2

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 9, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

f8307daCombinatorialPolyhedra: Use the category CombinatorialPolyhedralSets()

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 9, 2021

Changed commit from 80026c2 to f8307da

@mkoeppe
Copy link
Member Author

mkoeppe commented May 9, 2021

comment:6

Here's a beginning, without adding anything useful yet.

@mkoeppe
Copy link
Member Author

mkoeppe commented May 9, 2021

Author: Matthias Koeppe

@kliem
Copy link
Contributor

kliem commented May 10, 2021

comment:8

Thanks for taking care of this.

I have no experience with categories and what is best practice there. But I think it makes sense to mention my ideas/plans for this module so they can be considered if they need to.

Status quo (from my point of view):

CombinatorialPolyhedron is mainly a wrapper around FaceIterator. To make it complete, there is also PolyhedronFaceLattice which collects all faces from the FaceIterator and calculates all the cover relations.

FaceIterator works for simplicial complexes and for the intersection lattice of reflection groups of a root system (as in ReflectionGroup(['E',6])).

Plans, Ideas:

  • Implement parallel f-vector for polytopes #31245 uses the FaceIterator in parallel for the f-vector. This parallel approach is applicable to other problems.
  • Now that we use data_structures/bitset the underlying bitsets are much easier to handle. This allows doing polyhedral constructions just on the combinatorial polyhedron (and trusting bitsets to do the right thing instead of rethinking everything).
  • Eventually some of the code should be moved to a more generic place in sage. Probably it makes sense to have CombinatorialPolyhedron inherit from a more generic interface to FaceIterator. (I'm currently waiting for Implement parallel f-vector for polytopes #31245). Then simplicial complexes and reflection groups should have access to it as well. In the end it is just an iterator that works over lattices with one of the following properties (atomic = all elements are joins of atoms):
    • intervals of length 2 contain at least 2 elements (true for polytopes and true enough for unbounded polyhedra)
    • simplicial coatomic lattices (or the dual thing) -- a lattice where each interval not containing the upper bound is boolean (true for simplicial complexes and for simplicial polytopes), this iterator is much faster than the previous version
    • it would also for atomic and coatomic lattices in general with some minor changes (however, I don't see a use case yet)
  • There is still the big agenda that CombinatorialPolyhedron should replace all combinatorial things in cones, lattice polytopes and polyhedra. In particular it should deprecate sage/src/sage/geometry/hasse_diagram.py.

@mkoeppe
Copy link
Member Author

mkoeppe commented May 10, 2021

comment:9

Thanks a lot for sharing this valuable perspective.

Regarding PolyhedronFaceLattice, perhaps this could become a parent class in the categories CombinatorialPolyhedralSets and FiniteLatticePosets. (Currently you go through making a digraph and calling Poset -- perhaps this can be implemented more directly.)

I think most of the other things are orthogonal to this ticket.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 13, 2021

Changed commit from f8307da to c0c7631

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 13, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

c0c7631sage.geometry.polyhedron.combinatorial_polyhedron.{homset,morphism}: New

@mkoeppe mkoeppe changed the title Make CombinatorialPolyhedron an element class Make CombinatorialPolyhedron an element class, define morphisms of combinatorial polyhedral sets May 14, 2021
@mkoeppe
Copy link
Member Author

mkoeppe commented May 14, 2021

comment:12

Missing: The actual implementation of the morphism (CombinatorialPolyhedraMorphism.__call__ method).

@mkoeppe
Copy link
Member Author

mkoeppe commented May 16, 2021

Dependencies: #30469

@mkoeppe
Copy link
Member Author

mkoeppe commented May 16, 2021

Changed dependencies from #30469 to #30469, #31821

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 16, 2021

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

3896c32fix naming and fix a doctest
82db408reintroduce spaces to fix merge conflict
f460b23improve documentation
479f743better variable names for documentation
ab9d41eMerge #30469
79983a9fix pickling of representation objects with backend normaliz
5e65a5eadd doctest
b285d95run testsuite on combinatorial polyhedron
db82c83Merge #31821
25f7e34CombinatorialPolyhedron: Make it a factory function, rename class to CombinatorialPolyhedron_class

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 16, 2021

Changed commit from c0c7631 to 25f7e34

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 16, 2021

Changed commit from 25f7e34 to 24e2d5d

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 16, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

24e2d5dCombinatorialPolyhedraMorphism: Add example

@mkoeppe
Copy link
Member Author

mkoeppe commented May 28, 2021

comment:17

Should SimplicialComplexes become a subcategory of CombinatorialPolyhedralSets?

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 29, 2021

Changed commit from 24e2d5d to df05a1a

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 29, 2021

Branch pushed to git repo; I updated commit sha1. New commits:

df05a1aSimplicialComplexes: Make it a subcategory of CombinatorialPolyhedralSets

@mkoeppe

This comment has been minimized.

@mkoeppe mkoeppe modified the milestones: sage-9.4, sage-9.5 Jul 19, 2021
@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 9, 2021

Changed commit from df05a1a to 0a15b46

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 9, 2021

Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:

f9d15f3sage.categories.polyhedra (PolyhedralSets): Explain what the parents and elements are
1f1922asage.categories.combinatorial_polyhedral_sets: New
6728fdcCombinatorialPolyhedra: New parent class, use it to make CombinatorialPolyhedron an element class
ced1988CombinatorialPolyhedralSets: Add element methods dim/dimension, subcategory Finite with parent method dimension
633db6dPolyhedralSets: Make it a subcategory of CombinatorialPolyhedralSets
c3ccc63CombinatorialPolyhedra: Use the category CombinatorialPolyhedralSets()
05aa347sage.geometry.polyhedron.combinatorial_polyhedron.{homset,morphism}: New
0aa274fCombinatorialPolyhedron: Make it a factory function, rename class to CombinatorialPolyhedron_class
d0243fbCombinatorialPolyhedraMorphism: Add example
0a15b46SimplicialComplexes: Make it a subcategory of CombinatorialPolyhedralSets

@mkoeppe
Copy link
Member Author

mkoeppe commented Aug 9, 2021

Changed dependencies from #30469, #31821 to none

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants