Let M be a matroid of rank d on a ground set E of size n. Its realization spaceR(M) is an affine scheme that parameterizes all hyperplane arrangements that realize the matroid M (up to the action of PGL(r)). We provide functions that determine the affine coordinate ring of R(M).
This function returns the data for the coordinate ring of the matroid realization space of the matroid M as a MatroidRealizationSpace. This function has several optional parameters.
B is a basis of M that specifies which columns of realization_matrix(M) form an identity matrix. The default is nothing, in which case the basis is chosen for you.
saturate determines whether defining_ideal(M) should be saturated with respect to the semigroup generated by inequations(M). The default is false. The saturation can be rather slow for large instances.
simplify determines whether a reduced realization space is returned which means that the equations are used to eliminate variables as far as possible. The default is true.
char specifies the characteristic of the coefficient ring. The returned realization space is then the space of all realizations over fields of characteristic char. The default is nothing.
q is an integer and assumed to be a prime power q=p^k. The returned realization space is then the space of all realizations over the field GF(pk). The default is nothing.
ground_ring is a ring and specifies the groundring over which one wants to consider the realization space, e.g. QQ or GF(p). The groudring ZZ means that we compute the space of realizations over all fields. The default is ZZ.
Examples
julia> M = fano_matroid();
julia> RS = realization_space(M)
The realization space is
[0 1 1 1 1 0 0]
[1 0 1 1 0 1 0]
[1 0 1 0 1 0 1]
in the integer ring
within the vanishing set of the ideal
2ZZ
julia> realization_space(non_fano_matroid())
The realization space is
[1 1 0 0 1 1 0]
[0 1 1 1 1 0 0]
[0 1 1 0 0 1 1]
in the integer ring
avoiding the zero loci of the polynomials
RingElem[2]
julia> realization_space(pappus_matroid(), char=0)
The realization space is
[1 0 1 0 x2 x2 x2^2 1 0]
[0 1 1 0 1 1 -x1*x2 + x1 + x2^2 1 1]
[0 0 0 1 x2 x1 x1*x2 x1 x2]
in the multivariate polynomial ring in 2 variables over QQ
avoiding the zero loci of the polynomials
RingElem[x1 - x2, x2, x1, x2 - 1, x1 + x2^2 - x2, x1 - 1, x1*x2 - x1 - x2^2]
julia> realization_space(uniform_matroid(3,6))
The realization space is
[1 0 0 1 1 1]
[0 1 0 1 x1 x3]
[0 0 1 1 x2 x4]
in the multivariate polynomial ring in 4 variables over ZZ
avoiding the zero loci of the polynomials
RingElem[x1*x4 - x2*x3, x2 - x4, x1 - x3, x1*x4 - x1 - x2*x3 + x2 + x3 - x4, x3 - x4, x4 - 1, x3 - 1, x3, x4, x1 - x2, x2 - 1, x1 - 1, x1, x2]
Experimental
This function is part of the experimental code in Oscar. Please read here for more details.
This function tries to find one realization in the matroid realization space of the matroid M. The output is again a MatroidRealizationSpace.
If the matroid is only realizable over an extension of the prime field the extension field is specified as a splitting field of an irreducible polynomial. Every root of this polynomial gives an equivalent realization of the matroid.
This function has several optional parameters. Note that one must input either the characteristic or a specific field of definition for the realization.
B is a basis of M that specifies which columns of realization_matrix(M) form the identity matrix. The default is nothing, in which case the basis is chosen for you.
char specifies the characteristic of the coefficient ring, and is used to determine if the matroid is realizable over a field of this characteristic. The default is nothing.
q is an integer, and when char = p, this input is used to determine whether the matroid is realizable over the finite field GF(pq). The default is nothing.
reduce determines whether a reduced realization space is returned which means that the equations are used to eliminate variables as far as possible. The default is true.
saturate determines whether defining_ideal(M) should be saturated with respect to the semigroup generated by inequations(M). The default is false. This can be rather slow for large instances.
Examples
julia> realization(pappus_matroid(), char=0)
One realization is given by
[1 0 1 0 2 2 4 1 0]
[0 1 1 0 1 1 1 1 1]
[0 0 0 1 2 3 6 3 2]
in the rational field
julia> realization(pappus_matroid(), q=4)
One realization is given by
[1 0 1 0 x1 + 1 x1 + 1 x1 1 0]
[0 1 1 0 1 1 1 1 1]
[0 0 0 1 x1 + 1 x1 1 x1 x1 + 1]
in the multivariate polynomial ring in 1 variable over GF(2)
within the vanishing set of the ideal
Ideal (x1^2 + x1 + 1)
julia> realization(uniform_matroid(3,6), char=5)
One realization is given by
[1 0 0 1 1 1]
[0 1 0 1 4 3]
[0 0 1 1 3 2]
in the prime field of characteristic 5
Experimental
This function is part of the experimental code in Oscar. Please read here for more details.
If B is the polynomial ring ambient_ring(RS), I the ideal defining_ideal(RS), and U the multiplicative semigroup generated by inequations(RS), then the coordinate ring of the realization space R(M) is isomorphic to U−1B/I.
Every MatroidRealizationSpace is an instance of an affine scheme. For those cases where implementations exist, the entire functionality provided for AbsAffineSchemes applies to matroid realization spaces. For example:
julia> RM = realization_space(pappus_matroid(), ground_ring=QQ)
The realization space is
[1 0 1 0 x2 x2 x2^2 1 0]
[0 1 1 0 1 1 -x1*x2 + x1 + x2^2 1 1]
[0 0 0 1 x2 x1 x1*x2 x1 x2]
in the multivariate polynomial ring in 2 variables over QQ
avoiding the zero loci of the polynomials
RingElem[x1 - x2, x2, x1, x2 - 1, x1 + x2^2 - x2, x1 - 1, x1*x2 - x1 - x2^2]
julia> OO(RM)
Localization
of quotient
of multivariate polynomial ring in 2 variables x1, x2
over rational field
by ideal (0)
at products of (x1 - x2, x2, x1, x2 - 1, x1 + x2^2 - x2, x1 - 1, x1*x2 - x1 - x2^2)
julia> is_smooth(RM) # Calls the generic routine implemented for schemestrue
julia> x, y = gens(OO(RM)); I = ideal(OO(RM), [x - 4, y^2 - 8]);
julia> pr = blow_up(RM, I)
Blowup
of scheme over QQ covered with 1 patch
1b: [x1, x2] scheme(0) \ scheme((x1 - x2)*x2*x1*(x2 - 1)*(x1 + x2^2 - x2)*(x1 - 1)*(x1*x2 - x1 - x2^2))
in sheaf of ideals with restriction
1b: Ideal (x1 - 4, x2^2 - 8)
with domain
scheme over QQ covered with 2 patches
1a: [(s1//s0), x1, x2] scheme(-(s1//s0)*x1 + 4*(s1//s0) + x2^2 - 8) \ scheme((x1 - x2)*x2*x1*(x2 - 1)*(x1 - 1)*(x1 + x2^2 - x2)*(x1*x2 - x1 - x2^2))
2a: [(s0//s1), x2] scheme(0) \ scheme(((s0//s1)*x2^2 - 8*(s0//s1) - x2 + 4)*x2*((s0//s1)*x2^2 - 8*(s0//s1) + 4)*(x2 - 1)*((s0//s1)*x2^2 - 8*(s0//s1) + 3)*((s0//s1)*x2^2 - 8*(s0//s1) + x2^2 - x2 + 4)*((s0//s1)*x2^3 - (s0//s1)*x2^2 - 8*(s0//s1)*x2 + 8*(s0//s1) - x2^2 + 4*x2 - 4))
and exceptional divisor
effective cartier divisor defined by
sheaf of ideals with restrictions
1a: Ideal (x1 - 4)
2a: Ideal (x2^2 - 8)
julia> first(affine_charts(codomain(pr))) === RM
true
Note, however, that there are also cases which are not covered. For instance, one realization of the fano_matroid() is Spec(Z/2Z) which is not (yet) supported by the schemes framework.
Settings
This document was generated with Documenter.jl version 1.11.4 on Thursday 5 June 2025. Using Julia version 1.10.9.