Skip to content

Commit

Permalink
gh-35802: Implementing Golod complexes
Browse files Browse the repository at this point in the history
    
### Implementing Golod (simplicial) complexes

<!-- Describe your changes here in detail. -->
<!-- Why is this change required? What problem does it solve? -->
<!-- If this PR resolves an open issue, please link to it here. For
example "Fixes #12345". -->
<!-- If your change requires a documentation PR, please link it
appropriately. -->

This is a part of #35640 (GSoC 20223), relies on #35430 (bigraded Betti
numbers).

Added two methods: `is_golod()` and `is_minimally_non_golod()`, defined
for simplicial complexes. These are significant invariants used in toric
topology.

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. It should be `[x]` not `[x
]`. -->

- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [ ] I have created tests covering the changes.
- [x] I have updated the documentation accordingly.
    
URL: #35802
Reported by: Ognjen Petrov
Reviewer(s): Travis Scrimshaw
  • Loading branch information
Release Manager committed Jul 8, 2023
2 parents 8cffff5 + b86791d commit e97ed20
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions src/sage/topology/simplicial_complex.py
Original file line number Diff line number Diff line change
Expand Up @@ -4950,6 +4950,61 @@ def bigraded_betti_number(self, a, b, base_ring=ZZ):

return B

def is_golod(self):
r"""
Return whether ``self`` is Golod.
A simplicial complex is Golod if multiplication and all higher
Massey operations in the associated Tor-algebra are trivial. This
is done by checking the bigraded Betti numbers.
EXAMPLES::
sage: X = SimplicialComplex([[0,1],[1,2],[2,3],[3,0]])
sage: Y = SimplicialComplex([[0,1,2],[0,2],[0,4]])
sage: X.is_golod()
False
sage: Y.is_golod()
True
"""
H = list(a+b for (a, b) in self.bigraded_betti_numbers())
if 0 in H:
H.remove(0)

return not any(i+j in H for ii, i in enumerate(H) for j in H[ii:])

def is_minimally_non_golod(self):
r"""
Return whether ``self`` is minimally non-Golod.
If a simplicial complex itself is not Golod, but deleting each vertex
gives us a full subcomplex that is Golod, then we say that a simplicial
complex is minimally non-Golod.
.. SEEALSO::
See :meth:`is_golod` for more information.
EXAMPLES::
sage: X = SimplicialComplex([[0,1],[1,2],[2,3],[3,0]])
sage: Y = SimplicialComplex([[1,2,3],[1,2,4],[3,5],[4,5]])
sage: X.is_golod()
False
sage: X.is_minimally_non_golod()
True
sage: Y.is_golod()
False
sage: Y.is_minimally_non_golod()
False
"""
def test(v):
X = copy(self)
X.remove_face([v])
return X.is_golod()

return (not self.is_golod()) and all(test(v) for v in self.vertices())

# Miscellaneous utility functions.

# The following two functions can be used to generate the facets for
Expand Down

0 comments on commit e97ed20

Please sign in to comment.