Rank-determining sets #
A set A of vertices is rank-determining when the rank of every divisor can
be read off using only effective divisors supported on A:
rank G D ≥ r ↔ ∀ E effective, deg E = r, supp E ⊆ A → winnable G (D - E)
The left-to-right implication is trivial and holds for every A
(winnable_sub_of_rank_ge); the content is the converse, which says that the
|A|-many tests already see everything the full quantifier over all effective
divisors of degree r would see.
Main result and proof structure #
On a subdivision of a loopless core, the core vertices are
rank-determining. The finite-graph proof given here does not invoke Luo's
metric-graph theorem: it factors into a strong-separator argument at r = 1
and a purely arithmetic promotion from r = 1 to all r.
Contents:
RankDeterminingSetand its cheap general theory — the trivial direction, monotonicity inA, the fact thatFinset.univis rank-determining, and the specialization tor = 1, which reproducesrank_ge_one_iff_winnable_sub_one_chipfromFoundations/RankOne.lean(rank_ge_one_iff_winnable_sub_one_chip_of_univ).rankDeterminingSet_of_rank_ge_one— ther = 1case is the whole content. A set that decides rank one for every divisor is rank-determining at everyr, by an induction that needs nothing about the graph.Certificate.SubdivisionGraph.Spec.rank_ge_one_of_forall_mem_coreVertices— the single geometric input, atr = 1, assembled from the strong-separator machinery.Certificate.SubdivisionGraph.Spec.rankDeterminingSet_coreVertices— the theorem itself, at generalr, and its consumersSpec.rank_ge_one_of_reaches_coreVerticesandSpec.rank_ge_iff_core_criterion.- A two-sided rank criterion and its Riemann--Roch reduction
(
winnable_iff_forall_add_supported_effective,rank_ge_iff_forall_sub_add_supported): they take a rank-determining set as a hypothesis and derive a two-sided criterion, so that theF-quantifier costs no second appeal to the geometry.
Everything in this file is proved and depends only on
[propext, Classical.choice, Quot.sound].
How the theorem is proved #
The proof has two halves.
Half one, r = 1. The needed statement is that
a divisor reaching every core vertex has rank at least one, and that is the
strong-separator lemma of van Dobben de Bruyn--Gijswijt (Lemma 2.6), formalized
here as Certificate.StrongSeparator.rank_ge_one_of_strongSeparatorCertificate
(Subdivision/StrongSeparator.lean). Its hypothesis for the embedded core is
discharged by Spec.coreVertices_strongSeparatorCertificate
(Subdivision/SubdivisionSeparator.lean), which is exactly the "components of
the complement are slot interiors" step: after removing any enlargement of the
core, each remaining cell is a contiguous interval of positions inside a single
subdivided slot (Spec.ComplementInterval, Spec.exists_complementInterval),
and Spec.expansionCell checks the one-edge and path-cut conditions for it.
These two separator results supply the complete geometric input.
Half two, r = 1 implies every r: rankDeterminingSet_of_rank_ge_one.
An induction on r in which each step applies the r = 1 hypothesis at a
shifted divisor D - E. No geometry, no induction on the degree of the test
divisor, and no second appeal to half one. See the section header there.
Consequently no metric graph appears anywhere, and the discrete/metric
comparison of Hladký--Král--Norine (Theorem 1.3), which a genuine port of Luo
would have needed in order to descend to spec.graph, is not required either.
The looplessness hypothesis is forced, not defensive #
Luo's theorem (Thm. 1.6) is stated for a loopless model (G, ℓ) of a
metric graph Γ; the general criterion behind it (see the form quoted as
"Luo's Theorem" in Cools--Draisma--Payne--Robeva) asks that the closure in Γ
of every connected component of Γ ∖ A be contractible.
For a subdivision of a core with A = the core vertices, a component of
Γ ∖ A is the interior of a single edge slot, and its closure is that slot
together with its two endpoints:
- a slot joining distinct core vertices closes up to a segment — contractible, so the criterion is met;
- a loop slot at a core vertex
vcloses up to a circle — not contractible, and the criterion fails.
The same dichotomy is visible in the proof actually used here, without any
topology: a core vertex v carrying a loop slot of length ≥ 2 has two
edges into that slot's interior, so the interior violates the oneEdge field of
StrongSeparator.ExpansionCell and is not a strong-separator cell. A slot
between distinct core vertices contributes one edge at each end, and is.
The failure is not an artifact of the proof: on a core carrying a loop slot, a divisor can reach every core vertex and still fail to have rank one because the obstruction lies in the interior of the loop chain. Statements below therefore carry looplessness explicitly.
Note that Certificate.SubdivisionGraph.Spec already demands
core_loopless, so the dangerous object cannot even be built through it. That
is structural protection, but it is protection only as long as nobody
generalizes to a core type without the field: ExplicitPotential.Core itself
permits tail e = head e, and a loop slot of length ≥ 2 subdivides to a
perfectly legal loopless CFGraph. This is why the looplessness hypothesis is
repeated as an explicit binder below rather than left implicit in the structure.
References #
Ye Luo, Rank-determining sets of metric graphs, J. Combin. Theory Ser. A 118 (2011), 1775--1793. Theorem 1.6 there is the general statement whose special case is proved here; the general criterion is not formalized, and nothing below depends on it. Likewise Hladký--Král--Norine, Rank of divisors on tropical curves (arXiv:0709.4485), Theorem 1.3, is the discrete/metric comparison a port of Luo would have needed, and is not used.
The proof that is used is the discrete strong-separator lemma of
J. van Dobben de Bruyn and D. Gijswijt, Treewidth is a lower bound on graph
gonality, Lemma 2.6, formalized in Subdivision/StrongSeparator.lean.
The definition #
A divisor is supported on A when it vanishes at every vertex outside
A.
Equations
- Utilities.SupportedOn A E = ∀ v ∉ A, E v = 0
Instances For
A is a rank-determining set for G: the rank of every divisor is
computed by the effective test divisors supported on A alone.
The forward implication is trivial for every A (winnable_sub_of_rank_ge);
the content is the backward one, and rankDeterminingSet_iff repackages the
definition as that half.
Note the quantifier is over all r : ℤ, matching rankGeq. For r < 0 both
sides hold vacuously, so nothing is claimed there.
Equations
- Utilities.RankDeterminingSet G A = ∀ (D : CFDiv G) (r : ℤ), rank G D ≥ r ↔ ∀ (E : CFDiv G), effective E → CFDiv.degree E = r → Utilities.SupportedOn A E → winnable G (D - E)
Instances For
The trivial direction, and cheap general theory #
The trivial half of a rank-determining-set statement: if rank D ≥ r then
D - E is winnable for every effective E of degree r, supported anywhere.
This holds for all graphs and needs no hypothesis on any vertex set.
RankDeterminingSet is exactly its nontrivial half. Consumers proving a
set rank-determining only ever have to supply this implication.
Every vertex set containing a rank-determining set is rank-determining.
Enlarging A only weakens the hypothesis the hard direction has to consume.
The full vertex set is rank-determining; this is the definition of rank
unwound, and is the base case that every other rank-determining set improves
on.
The r = 1 specialization #
A one-chip divisor is supported on any set containing its vertex.
At r = 1 a rank-determining set gives a vertexwise reachability test:
rank at least one is decided by subtracting one chip at each vertex of
A.
Sanity check that the definition specializes correctly: at A = univ the
r = 1 criterion is exactly rank_ge_one_iff_winnable_sub_one_chip from
Foundations/RankOne.lean.
From r = 1 to every r #
RankDeterminingSet quantifies over all r, but the r = 1 case is the
whole content: rankDeterminingSet_of_rank_ge_one below promotes it to every
r with no further geometric input. Only the r = 1 case ever needs a fact
about the graph, so a consumer proving a set rank-determining has exactly one
obligation.
The promotion is an induction on r, and each step uses the r = 1 hypothesis
at a shifted divisor:
- to see
rank D ≥ k + 1it suffices to seerank (D - w) ≥ kfor every vertexw(rank_ge_add_one_of_forall_rank_sub_one_chip_ge); - to see
rank (D - w) ≥ kthe inductive hypothesis asks forwinnable (D - w - E)forEeffective of degreeksupported onA; - and that is
winnable (D - E - w), which follows fromrank (D - E) ≥ 1— ther = 1hypothesis at the divisorD - E, whose own testswinnable (D - E - v)forv ∈ Aare the degree-(k+1)tests ofDat the supported divisorsE + v.
No induction on the degree of the test divisor and no second appeal to the geometry is involved.
An effective divisor of positive degree carries a chip somewhere.
The one-chip step up. If every one-chip subtraction has rank at least
k ≥ 0, then the divisor itself has rank at least k + 1. This is the
converse of rank_sub_one_chip_ge_of_rank_ge_succ from
Foundations/RankChipStep.lean, and it is what turns the r = 1 case of a
rank-determining-set statement into the general one.
The r = 1 case is the whole content of RankDeterminingSet.
A vertex set which decides rank one for every divisor — i.e. for which
winnable (D - v) at all v ∈ A already forces rank D ≥ 1 — is
rank-determining at every r.
This is the reduction that lets a geometric input be supplied only once, at
r = 1; see Spec.rankDeterminingSet_coreVertices.
A two-sided criterion and its Riemann--Roch reduction #
The relevant criterion is
rank D ≥ r ↔ D - E + F winnable for all effective E of degree r and
all effective F of degree g - deg D + r - 1, both supported on A.
Although a rank-determining-set hypothesis appears relevant to both
quantifiers, the F-side is a Riemann--Roch consequence of the E-side. The reduction is
winnable_iff_forall_add_supported_effective below, and it is short:
Dis winnable iffrank (K - D) ≥ g - 1 - deg D(canonical_sub_rank_ge_iff_winnable_of_degree);- that rank inequality is tested on
Aby the one rank-determining-set hypothesis; - each test
winnable (K - D - F)iswinnable (K - (D + F)), anddeg (D + F) = g - 1, so it iswinnable (D + F)(degree_genus_sub_one_winnable_iff_complement_winnable).
No induction on deg F is needed; the degree bookkeeping does it in one step.
The Riemann--Roch reduction of the F-quantifier. Winnability of D
is decided by winnability of D + F for the effective divisors F of the
complementary degree g - 1 - deg D supported on a rank-determining set.
Thus only one rank-determining-set hypothesis is required.
Two-sided rank criterion. For a rank-determining set A on a connected
graph, rank D ≥ r is decided by the two-sided test
D - E + F over effective E of degree r and effective F of degree
g - deg D + r - 1, both supported on A.
It follows from a single rank-determining-set hypothesis: the E-side is
that hypothesis, and the F-side is
winnable_iff_forall_add_supported_effective.
Luo's theorem for a subdivided loopless core #
The core vertices of a subdivision, as a finite set of subdivision vertices.
Equations
- spec.coreVertices = Finset.image spec.coreVertex Finset.univ
Instances For
Spec.coreVertices and the ExplicitPotential.CertificateData spelling of the
same set agree on the nose. Both are Finset.univ.image spec.coreVertex; the
duplicate exists only because the two namespaces grew independently, and this
rfl lets the separator machinery be quoted verbatim.
The geometric input, at r = 1: a divisor reaching every core vertex of
a subdivided loopless core has rank at least one.
This is the entire graph-theoretic content of the rank-determining-set theorem
below; rankDeterminingSet_of_rank_ge_one supplies every other r for free.
It is not proved here by porting Luo's general metric-graph criterion. The proof assembles the following two finite-graph ingredients:
SubdivisionSeparator.lean— "components of the complement are slot interiors".Spec.ComplementIntervalandSpec.exists_complementIntervalshow that after removing any enlargementR ⊇ core vertices, every remaining cell is a contiguous interval(left, right)of positions inside a single subdivided slot, withleftandrightinR;Spec.expansionCellpackages such an interval as aStrongSeparator.ExpansionCell, verifying the two properties that fail for a loop slot — one edge per boundary vertex into the cell, and the path-cut condition. Culminates inSpec.coreVertices_strongSeparatorCertificate.StrongSeparator.lean— "the one-path lemma implies the theorem".StrongSeparator.rank_ge_one_of_strongSeparatorCertificateis the discrete form of van Dobben de Bruyn--Gijswijt, Lemma 2.6: enlarge the core to the setRof all vertices reached byD, and ifR ≠ univa complementary cell plus oneq-reduction produces a vertex outsideRthatDreaches after all — a contradiction.
Where looplessness enters. Spec carries core_loopless as a field, and
it is used twice in the chain above: stepLeft_ne_stepRight needs it to build
spec.graph at all when a slot has length one, and — the substantive use — the
oneEdge field of the expansion cell needs it, because a core vertex v
carrying a loop slot of length ≥ 2 has two edges into that slot's
interior, so the interior is not a strong-separator cell.
A finite-graph special case of Luo's rank-determining set theorem.
On the subdivision of a finite loopless core, the core vertices are
rank-determining: for every divisor D and every r, rank D ≥ r already
follows from winnability of D - E for the effective divisors E of degree r
supported at core vertices.
The general statement is Ye Luo, Rank-determining sets of metric graphs,
J. Combin. Theory Ser. A 118 (2011), 1775--1793, Theorem 1.6 ("for a
loopless model (G, ℓ) of a metric graph Γ, the set V(G) ⊆ Γ is
rank-determining"). Luo is not used, and no metric graph appears. In the
special case at hand — a subdivision of a loopless core, tested at its own core
vertices — the theorem factors into two elementary halves:
- the
r = 1case,Spec.rank_ge_one_of_forall_mem_coreVertices, which is the strong-separator argument on the slot-interval decomposition of the complement (see that docstring for the full attribution); - the promotion from
r = 1to allr,rankDeterminingSet_of_rank_ge_one, which is pure divisor bookkeeping and uses nothing about the graph.
Consequently no discrete/metric comparison (Hladký--Král--Norine, Theorem 1.3)
is needed either: the whole argument stays on the finite graph spec.graph.
Looplessness is a hypothesis of the theorem, not a convenience.
hLoopless restates the field spec.core_loopless; it is an explicit binder
so that no consumer can invoke this result without meeting it, and so that a
future restatement over a core type that does not build looplessness in
(ExplicitPotential.Core does not) keeps it. With a loop slot at a core vertex
v, that vertex has two edges into the slot's interior, the interior is not a
strong-separator cell, the closure of the corresponding component of
Γ ∖ (core vertices) is a circle rather than a segment, and the conclusion is
false: a divisor may reach every core vertex of a loop-carrying core and still
have rank zero, with the obstruction living in the loop chain's interior.
hConnected is needed by the q-reduced-representative step inside the
strong-separator lemma and by the Riemann--Roch argument.
The r = 1 core criterion: a divisor on the subdivision that reaches every
core vertex has rank at least one.
Proved, via Spec.rankDeterminingSet_coreVertices.
The two-sided criterion on a subdivided loopless core, at general r: the
combination of Spec.rankDeterminingSet_coreVertices (for the E-quantifier)
with the Riemann--Roch reduction (for the F-quantifier). Both inputs are
proved above.