Skip to content

Commit

Permalink
Update: Functionality for matroid realization spaces (oscar-system#2925)
Browse files Browse the repository at this point in the history
- Add functionality for realization space of matroids. The realization space contains all vector sets that realize a given matroid.
- Add several standard constructions.
  • Loading branch information
bschroter authored Nov 13, 2023
1 parent 50c964f commit fdc09bf
Show file tree
Hide file tree
Showing 14 changed files with 1,170 additions and 403 deletions.
40 changes: 6 additions & 34 deletions docs/src/Combinatorics/matroids.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,12 @@ matroid_from_revlex_basis_encoding(rvlx::String, r::IntegerUnion, n::IntegerUnio
```@docs
uniform_matroid(r::IntegerUnion,n::IntegerUnion)
fano_matroid()
moebius_kantor_matroid()
non_fano_matroid()
non_pappus_matroid()
pappus_matroid()
perles_matroid()
R10_matroid()
vamos_matroid()
all_subsets_matroid(r::Int)
projective_plane(q::Int)
Expand Down Expand Up @@ -109,46 +112,15 @@ reduced_characteristic_polynomial(M::Matroid)
revlex_basis_encoding(M::Matroid)
is_isomorphic(M1::Matroid, M2::Matroid)
is_minor(M::Matroid, N::Matroid)
automorphism_group(M::Matroid)
matroid_base_polytope(M::Matroid)
```


### Chow Rings
```@docs
chow_ring(M::Matroid; ring::Union{MPolyRing,Nothing}=nothing, extended::Bool=false)
augmented_chow_ring(M::Matroid)
```

## Matroid strata and realization spaces

For a matroid ``M``, of rank ``d`` on a ground set ``E`` of size ``n`` realizable over a ring ``K``,
its *matroid realization space* ``\mathsf{Gr}(M)`` is the locally closed subscheme of the Grassmannian
``\mathsf{Gr}(d,K^n)`` of ``d``-dimensional subspaces of ``K^n`` realizing ``M``. Precisely,

```math
\mathsf{Gr}(M) = \{F \in \mathsf{Gr}(d,K^n) \, : \, p_{I}(F) \neq 0 \text{ iff } I \in \mathcal{B}(M)\}
```

where ``\mathcal{B}(M)`` denotes the set of bases of ``M`` and ``p_{I}(F)`` denotes the ``I``th Pl\"ucker
coordinate of the linear subspace ``F \subset K^n``. The coordinate ring of ``\mathsf{Gr}(M)`` can be computed
using matrix coordinates, see Construction 2.2 of [Cor21](@cite). The following function computes this ring.

```@docs
matroid_stratum_matrix_coordinates(M::Matroid, B::GroundsetType, F::AbstractAlgebra.Ring = ZZ)
```

When the matroid ``M`` is connected, the diagonal torus of ``\mathsf{PGL}(n)`` acts freely on
``\mathsf{Gr}(M)`` and its quotient is the *realization space* ``R(M)`` of ``M``. There are two main differences between the coordinate rings ``K[\mathsf{Gr}(M)]`` and ``K[R(M)]``.

- To comupte ``K[R(M)]``, we assume that ``d+1`` columns ``A = \{a_1,\ldots,a_{d+1}\}`` of the reference matrix ``X`` are the unit vectors ``e_1,\ldots,e_n`` and ``e_1+ \cdots + e_n``. Note that every ``d`` element subset of ``A`` must be a basis of ``M``. Disconnected matroids do not satisfy this property.
- The columns of the reference matrix ``X`` may be treated as projective coordinates.

The coordinate ring of ``R(M)`` is computed in the following function.


```@docs
matroid_realization_space(M::Matroid, A::GroundsetType, F::AbstractAlgebra.Ring=ZZ)
```


```@docs
automorphism_group(m::Matroid)
```
2 changes: 2 additions & 0 deletions docs/src/DeveloperDocumentation/styleguide.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ deviate from them in some cases; in that case just do so.
create a point-type (or use the one already there) and then use this.
For user-facing functions, please do not use re-purposed lists, arrays,
matrices...
- Input sanity checks should be enabled by default, they can then be disabled
internally if they are known to be true, and manually by users.


## Naming conventions
Expand Down
5 changes: 5 additions & 0 deletions experimental/MatroidRealizationSpaces/docs/doc.main
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[
"Matroid Realization Spaces" => [
"introduction.md",
]
]
34 changes: 34 additions & 0 deletions experimental/MatroidRealizationSpaces/docs/src/introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
```@meta
CurrentModule = Oscar
```

# Matroid Realization Spaces


Let ``M`` be a matroid of rank ``d`` on a ground set ``E`` of size ``n``. Its
*realization space* ``\mathcal{R}(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
``\mathcal{R}(M)``.


```@docs
is_realizable(M::Matroid; char::Union{Int,Nothing}=nothing, q::Union{Int,Nothing}=nothing)
defining_ideal(RS::MatroidRealizationSpace)
inequations(RS::MatroidRealizationSpace)
ambient_ring(RS::MatroidRealizationSpace)
realization_space(M::Matroid; B::Union{GroundsetType,Nothing} = nothing,
F::AbstractAlgebra.Ring = ZZ, saturate::Bool=false, reduce::Bool=true,
char::Union{Int,Nothing}=nothing, q::Union{Int,Nothing}=nothing)
realization(M::Matroid; B::Union{GroundsetType,Nothing} = nothing,
F::AbstractAlgebra.Ring = ZZ, saturate::Bool=false, reduce::Bool=true,
char::Union{Int,Nothing}=nothing, q::Union{Int,Nothing}=nothing)
realization(RS::MatroidRealizationSpace)
```

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
``\mathcal{R}(M)`` is isomorphic to ``U^{-1}B/I``.


Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
include("realization_space.jl")

### Methods for realization spaces of matroids
function underlying_scheme(RS::MatroidRealizationSpace{BRT, RT}) where {BRT<:Ring, RT<:MPolyQuoLocRing}
isdefined(RS, :underlying_scheme) && return RS.underlying_scheme::Spec{BRT, RT}

P = ambient_ring(RS)::MPolyRing
I = defining_ideal(RS)::MPolyIdeal
U = MPolyPowersOfElement(P, P.(inequations(RS)))::MPolyPowersOfElement
RS.underlying_scheme = Spec(P, I, U)
return RS.underlying_scheme::Spec{BRT, RT}
end

Loading

0 comments on commit fdc09bf

Please sign in to comment.