Chow rings of matroids¶
AUTHORS:
Shriya M
- class sage.matroids.chow_ring.ChowRing(R, M, augmented, presentation=None)[source]¶
Bases:
QuotientRing_generic
The Chow ring of a matroid.
The Chow ring of the matroid \(M\) is defined as the quotient ring
\[A^*(M)_R := R[x_{F_1}, \ldots, x_{F_k}] / (I_M + J_M),\]where \((I_M + J_M)\) is the
Chow ring ideal
of matroid \(M\).The augmented Chow ring of matroid \(M\) has two different presentations as quotient rings:
The Feitchner-Yuzvinsky presentation is the quotient ring
\[A(M)_R := R[y_{e_1}, \ldots, y_{e_n}, x_{F_1}, \ldots, x_{F_k}] / I_{FY}(M),\]where \(I_{FY}(M)\) is the
Feitchner-Yuzvinsky augmented Chow ring ideal
of matroid \(M\).The atom-free presentation is the quotient ring
\[A(M)_R := R[x_{F_1}, \ldots, x_{F_k}] / I_{af}(M),\]where \(I_{af}(M)\) is the
atom-free augmented Chow ring ideal
of matroid \(M\).See also
INPUT:
M
– matroidR
– commutative ringaugmented
– boolean; whenTrue
, this is the augmented Chow ring and ifFalse
, this is the non-augmented Chow ringpresentation
– string (default:None
); one of the following (ignored ifaugmented=False
)"fy"
- the Feitchner-Yuzvinsky presentation"atom-free"
- the atom-free presentation
REFERENCES:
EXAMPLES:
sage: M1 = matroids.catalog.P8pp() sage: ch = M1.chow_ring(QQ, False) sage: ch Chow ring of P8'': Matroid of rank 4 on 8 elements with 8 nonspanning circuits over Rational Field
>>> from sage.all import * >>> M1 = matroids.catalog.P8pp() >>> ch = M1.chow_ring(QQ, False) >>> ch Chow ring of P8'': Matroid of rank 4 on 8 elements with 8 nonspanning circuits over Rational Field
- class Element(parent, rep, reduce=True)[source]¶
Bases:
QuotientRingElement
- degree()[source]¶
Return the degree of
self
.EXAMPLES:
sage: ch = matroids.Uniform(3, 6).chow_ring(QQ, False) sage: for b in ch.basis(): ....: print(b, b.degree()) 1 0 A01 1 A02 1 A12 1 A03 1 A13 1 A23 1 A04 1 A14 1 A24 1 A34 1 A05 1 A15 1 A25 1 A35 1 A45 1 A012345 1 A012345^2 2 sage: v = sum(ch.basis()) sage: v.degree() 2
>>> from sage.all import * >>> ch = matroids.Uniform(Integer(3), Integer(6)).chow_ring(QQ, False) >>> for b in ch.basis(): ... print(b, b.degree()) 1 0 A01 1 A02 1 A12 1 A03 1 A13 1 A23 1 A04 1 A14 1 A24 1 A34 1 A05 1 A15 1 A25 1 A35 1 A45 1 A012345 1 A012345^2 2 >>> v = sum(ch.basis()) >>> v.degree() 2
- homogeneous_degree()[source]¶
Return the (homogeneous) degree of
self
if homogeneous otherwise raise an error.EXAMPLES:
sage: ch = matroids.catalog.Fano().chow_ring(QQ, True, 'fy') sage: for b in ch.basis(): ....: print(b, b.homogeneous_degree()) 1 0 Ba 1 Ba*Babcdefg 2 Bb 1 Bb*Babcdefg 2 Bc 1 Bc*Babcdefg 2 Bd 1 Bd*Babcdefg 2 Bbcd 1 Bbcd^2 2 Be 1 Be*Babcdefg 2 Bace 1 Bace^2 2 Bf 1 Bf*Babcdefg 2 Babf 1 Babf^2 2 Bdef 1 Bdef^2 2 Bg 1 Bg*Babcdefg 2 Badg 1 Badg^2 2 Bbeg 1 Bbeg^2 2 Bcfg 1 Bcfg^2 2 Babcdefg 1 Babcdefg^2 2 Babcdefg^3 3 sage: v = sum(ch.basis()); v Babcdefg^3 + Babf^2 + Bace^2 + Badg^2 + Bbcd^2 + Bbeg^2 + Bcfg^2 + Bdef^2 + Ba*Babcdefg + Bb*Babcdefg + Bc*Babcdefg + Bd*Babcdefg + Be*Babcdefg + Bf*Babcdefg + Bg*Babcdefg + Babcdefg^2 + Ba + Bb + Bc + Bd + Be + Bf + Bg + Babf + Bace + Badg + Bbcd + Bbeg + Bcfg + Bdef + Babcdefg + 1 sage: v.homogeneous_degree() Traceback (most recent call last): ... ValueError: element is not homogeneous
>>> from sage.all import * >>> ch = matroids.catalog.Fano().chow_ring(QQ, True, 'fy') >>> for b in ch.basis(): ... print(b, b.homogeneous_degree()) 1 0 Ba 1 Ba*Babcdefg 2 Bb 1 Bb*Babcdefg 2 Bc 1 Bc*Babcdefg 2 Bd 1 Bd*Babcdefg 2 Bbcd 1 Bbcd^2 2 Be 1 Be*Babcdefg 2 Bace 1 Bace^2 2 Bf 1 Bf*Babcdefg 2 Babf 1 Babf^2 2 Bdef 1 Bdef^2 2 Bg 1 Bg*Babcdefg 2 Badg 1 Badg^2 2 Bbeg 1 Bbeg^2 2 Bcfg 1 Bcfg^2 2 Babcdefg 1 Babcdefg^2 2 Babcdefg^3 3 >>> v = sum(ch.basis()); v Babcdefg^3 + Babf^2 + Bace^2 + Badg^2 + Bbcd^2 + Bbeg^2 + Bcfg^2 + Bdef^2 + Ba*Babcdefg + Bb*Babcdefg + Bc*Babcdefg + Bd*Babcdefg + Be*Babcdefg + Bf*Babcdefg + Bg*Babcdefg + Babcdefg^2 + Ba + Bb + Bc + Bd + Be + Bf + Bg + Babf + Bace + Badg + Bbcd + Bbeg + Bcfg + Bdef + Babcdefg + 1 >>> v.homogeneous_degree() Traceback (most recent call last): ... ValueError: element is not homogeneous
- monomial_coefficients(copy=None)[source]¶
Return the monomial coefficients of
self
.EXAMPLES:
sage: ch = matroids.catalog.NonFano().chow_ring(QQ, True, 'atom-free') sage: v = ch.an_element(); v Aa sage: v.monomial_coefficients() {0: 0, 1: 1, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0}
>>> from sage.all import * >>> ch = matroids.catalog.NonFano().chow_ring(QQ, True, 'atom-free') >>> v = ch.an_element(); v Aa >>> v.monomial_coefficients() {0: 0, 1: 1, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0}
- to_vector(order=None)[source]¶
Return
self
as a (dense) free module vector.EXAMPLES:
sage: ch = matroids.Uniform(3, 6).chow_ring(QQ, False) sage: v = ch.an_element(); v -A01 - A02 - A03 - A04 - A05 - A012345 sage: v.to_vector() (0, -1, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0)
>>> from sage.all import * >>> ch = matroids.Uniform(Integer(3), Integer(6)).chow_ring(QQ, False) >>> v = ch.an_element(); v -A01 - A02 - A03 - A04 - A05 - A012345 >>> v.to_vector() (0, -1, -1, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0)
- basis()[source]¶
Return the monomial basis of the given Chow ring.
EXAMPLES:
sage: ch = matroids.Uniform(3, 6).chow_ring(QQ, True, 'fy') sage: ch.basis() Family (1, B1, B1*B012345, B0, B0*B012345, B01, B01^2, B2, B2*B012345, B02, B02^2, B12, B12^2, B3, B3*B012345, B03, B03^2, B13, B13^2, B23, B23^2, B4, B4*B012345, B04, B04^2, B14, B14^2, B24, B24^2, B34, B34^2, B5, B5*B012345, B05, B05^2, B15, B15^2, B25, B25^2, B35, B35^2, B45, B45^2, B012345, B012345^2, B012345^3) sage: set(ch.defining_ideal().normal_basis()) == set(ch.basis()) True sage: ch = matroids.catalog.Fano().chow_ring(QQ, False) sage: ch.basis() Family (1, Abcd, Aace, Aabf, Adef, Aadg, Abeg, Acfg, Aabcdefg, Aabcdefg^2) sage: set(ch.defining_ideal().normal_basis()) == set(ch.basis()) True sage: ch = matroids.Wheel(3).chow_ring(QQ, True, 'atom-free') sage: ch.basis() Family (1, A0, A0*A012345, A2, A2*A012345, A3, A3*A012345, A23, A23^2, A1, A1*A012345, A013, A013^2, A4, A4*A012345, A04, A04^2, A124, A124^2, A5, A5*A012345, A025, A025^2, A15, A15^2, A345, A345^2, A012345, A012345^2, A012345^3) sage: set(ch.defining_ideal().normal_basis()) == set(ch.basis()) True
>>> from sage.all import * >>> ch = matroids.Uniform(Integer(3), Integer(6)).chow_ring(QQ, True, 'fy') >>> ch.basis() Family (1, B1, B1*B012345, B0, B0*B012345, B01, B01^2, B2, B2*B012345, B02, B02^2, B12, B12^2, B3, B3*B012345, B03, B03^2, B13, B13^2, B23, B23^2, B4, B4*B012345, B04, B04^2, B14, B14^2, B24, B24^2, B34, B34^2, B5, B5*B012345, B05, B05^2, B15, B15^2, B25, B25^2, B35, B35^2, B45, B45^2, B012345, B012345^2, B012345^3) >>> set(ch.defining_ideal().normal_basis()) == set(ch.basis()) True >>> ch = matroids.catalog.Fano().chow_ring(QQ, False) >>> ch.basis() Family (1, Abcd, Aace, Aabf, Adef, Aadg, Abeg, Acfg, Aabcdefg, Aabcdefg^2) >>> set(ch.defining_ideal().normal_basis()) == set(ch.basis()) True >>> ch = matroids.Wheel(Integer(3)).chow_ring(QQ, True, 'atom-free') >>> ch.basis() Family (1, A0, A0*A012345, A2, A2*A012345, A3, A3*A012345, A23, A23^2, A1, A1*A012345, A013, A013^2, A4, A4*A012345, A04, A04^2, A124, A124^2, A5, A5*A012345, A025, A025^2, A15, A15^2, A345, A345^2, A012345, A012345^2, A012345^3) >>> set(ch.defining_ideal().normal_basis()) == set(ch.basis()) True
- matroid()[source]¶
Return the matroid of
self
.EXAMPLES:
sage: ch = matroids.Uniform(3,6).chow_ring(QQ, True, 'fy') sage: ch.matroid() U(3, 6): Matroid of rank 3 on 6 elements with circuit-closures {3: {{0, 1, 2, 3, 4, 5}}}
>>> from sage.all import * >>> ch = matroids.Uniform(Integer(3),Integer(6)).chow_ring(QQ, True, 'fy') >>> ch.matroid() U(3, 6): Matroid of rank 3 on 6 elements with circuit-closures {3: {{0, 1, 2, 3, 4, 5}}}