Basic #
Chip-firing graphs #
A chip-firing graph (CFGraph) is a loopless undirected multigraph with bundled vertex type
$V(G)$, implemented as G.V and assumed to be finite, decidably equal, and nonempty.
Edges are stored as a multiset of ordered pairs; numEdges G v w counts the total edge
multiplicity between $v$ and $w$, including both $(v,w)$ and $(w,v)$ entries.
We define the degree (valence) of a vertex as the sum of edge multiplicities at that vertex, and the genus (cyclomatic number) $g = |E| - |V(G)| + 1$, which plays a central role in the Riemann-Roch theorem for graphs.
Many main theorems in this library require connectivity; see graphConnected. In those cases, a
proof of connectivity must be provided as an additional argument.
A chip-firing graph is a loopless multigraph. It is not assumed connected by default, though many of our main theorems pertain to connected graphs.
- V : Type u
The finite nonempty type of graph vertices.
- instDecidableEq : DecidableEq self.V
The multiset of endpoint pairs encoding edges, including their multiplicities.
Instances For
The edge multiplicity between vertices $v$ and $w$.
When working with chip-firing graphs in this repository, prefer this function to the underlying multiset of edges.
Equations
Instances For
A graph is connected if its vertices cannot be partitioned into two nonempty sets with no edges between them.
This is equivalent to saying that there is a path between any two vertices, but the partition formulation is more convenient in this repository.
Equations
Instances For
The degree, or valence, of a vertex as an integer.
Equations
- vertexDegree G v = ∑ u : G.V, ↑(numEdges G v u)
Instances For
The divisor group #
A divisor (CFDiv G) is an integer-valued function on the vertices of a chip-firing graph,
representing a distribution of chips (possibly negative, i.e. debt) across vertices.
The divisor group $\operatorname{Div}(G)$ is implemented as CFDiv G, the abelian group
of functions $V(G) \to \mathbb{Z}$ under pointwise addition.
This section establishes basic operations on divisors: pointwise arithmetic lemmas, the
firing move at a single vertex (lending chips to all neighbors), the borrowing move
(the inverse operation), and the generalization to set firing. The firing vector
firingVector G v is the principal divisor produced by firing vertex $v$ once.
See:
- Corry-Perkinson, Definition 1.3.
- Corry-Perkinson, Definitions 1.5-1.6.
The result of firing a vertex $v$, starting from the divisor $D$.
See: Corry-Perkinson, Definition 1.5.
Equations
- firingMove G D v w = if w = v then D v - vertexDegree G v else D w + ↑(numEdges G v w)
Instances For
The result of borrowing at a vertex $v$, starting from a divisor $D$.
See: Corry-Perkinson, Definition 1.5.
Equations
- borrowingMove G D v w = if w = v then D v + vertexDegree G v else D w - ↑(numEdges G v w)
Instances For
The out-degree of v relative to S, counted with edge multiplicity.
Equations
- outdegreeSet G S v = ∑ w ∈ Finset.univ \ S, ↑(numEdges G v w)
Instances For
The principal divisor associated to firing a single vertex.
Equations
- firingVector G v w = if w = v then -vertexDegree G v else ↑(numEdges G v w)
Instances For
Principal divisors and linear equivalence #
A firing script (firingScript G = G.V → ℤ) assigns an integer firing level to each vertex.
The associated principal divisor prin G σ records the net chip flow at each vertex when
the script $\sigma$ is applied:
$$ (\operatorname{prin}_G \sigma)(v) = \sum_u (\sigma(u)-\sigma(v)) \operatorname{num\_edges}_G(v,u). $$
The subgroup of principal divisors principalDivisors G is generated by the firing vectors
firingVector G v for all $v$. Two divisors $D$ and $D'$ are linearly equivalent
(linearEquiv G D D') if their difference is a principal divisor. This defines an
equivalence relation on $\operatorname{Div}(G)$, and linearly equivalent
divisors have the same degree (see linear_equiv_preserves_deg).
The subgroup of principal divisors is generated by firing vectors at individual vertices.
Equations
Instances For
Two divisors are linearly equivalent if their difference is a principal divisor.
See: Corry-Perkinson, Definition 1.8.
Equations
- linearEquiv G D D' = (D' - D ∈ principalDivisors G)
Instances For
Linear equivalence is reflexive.
Linear equivalence is symmetric.
Linear equivalence is transitive.
Linear equivalence is an equivalence relation on $\operatorname{Div}(G)$.
A firing script is an integer-valued function on vertices, recording how many times each vertex is fired. Negative values represent borrowing.
See: Corry-Perkinson, Definition 2.2.
Equations
- firingScript G = (G.V → ℤ)
Instances For
The firing script that fires exactly the vertices in S, once each.
Instances For
The group homomorphism sending a firing script $\sigma$ to the principal divisor $$ (\operatorname{prin}_G \sigma)(v) = \sum_u (\sigma(u)-\sigma(v)) \operatorname{num\_edges}_G(v,u). $$
See: Corry-Perkinson, Definition 2.3;
prin G σ is the negative of the divisor $\operatorname{div}(\sigma)$ defined there,
since they implement a firing script as $D \mapsto D - \operatorname{div}(\sigma)$.
Equations
Instances For
A divisor is principal if and only if it equals prin G σ for some firing script σ.
This gives a concrete characterization of the subgroup principalDivisors G.
Effective divisors and winnability #
A divisor is effective if it assigns a nonnegative number of chips to every vertex.
The divisor group carries a natural partial order, where $D_1 \le D_2$ if and only if
$D_1(v) \le D_2(v)$ for all vertices $v$. Effectivity is equivalent to $D \ge 0$.
The submonoid of effective divisors is denoted Eff G.
A divisor $D$ is winnable if it is linearly equivalent to some effective divisor. Equivalently, the players can collectively win the dollar game starting from position $D$.
A divisor is winnable if it is linearly equivalent to an effective divisor.
See: Corry-Perkinson, Definition 1.14.
Equations
- winnable G D = ∃ D' ∈ Eff G, linearEquiv G D D'
Instances For
The degree homomorphism and the Laplacian #
The degree of a divisor $D$ is $\deg(D) = \sum_v D(v)$, the total number of chips. It is a group homomorphism $\mathrm{Div}(G) \to \mathbb{Z}$. Principal divisors have degree zero, so linearly equivalent divisors have equal degree.
The Laplacian matrix laplacianMatrix G is the matrix $L = \mathrm{Deg}(G) - A$, where
$\mathrm{Deg}(G)$ is the diagonal degree matrix and $A$ is the adjacency matrix.
Applying the Laplacian to a firing script produces the corresponding principal divisor.
The degree of a divisor is the sum of its values over all vertices.
See: Corry-Perkinson, Definition 1.4.
Equations
Instances For
Effective divisors have nonnegative degree.
The only effective divisor of degree 0 is 0.
Linearly equivalent divisors have the same degree.
See: Corry-Perkinson, Proposition 1.15.
An effective divisor of degree $k_1+k_2$ can be decomposed into a sum of two effective divisors of degrees $k_1$ and $k_2$, respectively.
The Laplacian matrix of a CFGraph.
See: Corry-Perkinson, Definition 2.6.
Equations
- laplacianMatrix G i j = if i = j then vertexDegree G i else -↑(numEdges G i j)
Instances For
Applies the Laplacian matrix to a firing script and a current divisor to obtain a new divisor.
Equations
- applyLaplacian G σ D v = D v - (laplacianMatrix G).mulVec σ v
Instances For
q-effective divisors #
Fix a vertex $q$. A divisor $D$ is $q$-effective if $D(v) \geq 0$ for all $v \neq q$;
it may have an arbitrary (possibly negative) value at $q$ itself. The structure qEffectiveDivisor
packages such a divisor with its proof of $q$-effectivity.
A key fact for connected graphs is that every divisor is linearly equivalent to a
$q$-effective divisor (q_effective_exists). The proof goes via the notion of a
benevolent set: a set $S$ is benevolent if any divisor can be made to have all its
debt concentrated on $S$ via firing moves.
A divisor bundled with a proof that it is $q$-effective.
- D : CFDiv G
The underlying divisor, effective away from the distinguished vertex.
- h_eff : qEffective q self.D
Instances For
A set of vertices is benevolent if it is possible to concentrate all debt on this set.
Equations
- benevolent G S = ∀ (D : CFDiv G), ∃ (E : CFDiv G), linearEquiv G D E ∧ ∀ (v : G.V), E v < 0 → v ∈ S
Instances For
In a connected graph, any nonempty set is benevolent.
In a connected graph, every divisor is linearly equivalent to a $q$-effective divisor.
Equivalently, every divisor can have all of its debt concentrated at $q$.
The q-reduction partial order #
A firing script $\sigma$ is a $q$-reducer if $\sigma(q) \leq \sigma(v)$ for all $v$,
meaning $q$ is fired the least (or not at all relative to the others). The relation
reducesTo G q D₁ D₂ holds when $D_2$ is obtained from $D_1$ by applying a $q$-reducer
script, i.e. $D_2 = D_1 + \mathrm{prin}(\sigma)$ for some $q$-reducer $\sigma$.
This relation is reflexive and transitive, and in connected graphs it is also antisymmetric
(reduces_to_antisymmetric), making it a partial order on $q$-effective divisors. The
antisymmetry relies on the fact that a firing script with trivial principal divisor must
be constant (constant_script_of_zero_prin).
Two further facts about this order do most of the work in the next section: the number of
chips at $q$ is monotone along the order (reduces_to_q_mono), and a script that is a
$q$-reducer in both directions has zero principal divisor
(prin_eq_zero_of_two_sided_reducer) — a connectivity-free shadow of antisymmetry.
q-reduced divisors #
A $q$-effective divisor $D$ is $q$-reduced if, for every nonempty set $S \subseteq V(G) \setminus \{q\}$, some vertex in $S$ would go into debt if $S$ were fired. Equivalently, $D$ is the maximum element of its linear equivalence class in the $q$-reduction partial order.
The main results of this section are:
- Every divisor has a unique $q$-reduced representative (
exists_q_reduced_representative,q_reduced_unique). - A divisor is winnable if and only if its $q$-reduced representative is effective
(
winnable_iff_q_reduced_effective).
The existence proof proceeds by defining an active vertex (one that can still be fired
while maintaining $q$-effectivity) and showing that the reductionExcess — the total chips
at active vertices — strictly decreases at each reduction step.
Equations
Firing a legal set preserves effectivity away from a distinguished vertex.
A divisor is $q$-reduced if it is effective away from $q$, and firing any nonempty set of vertices disjoint from $q$ puts some vertex of that set into debt.
See: Corry-Perkinson, Definition 3.4.
Equations
Instances For
The $q$-reduced representative of a divisor class is unique.
See: Corry-Perkinson, Theorem 3.6, part 2 (uniqueness).
A vertex is active if there exists a firing script that leaves the divisor effective away from $q$, fires $q$ minimally, and fires this vertex strictly more than $q$.
Equations
- active G q D v = ∃ (σ : firingScript G), qReducer G q σ ∧ qEffective q (D + (prin G) σ) ∧ σ q < σ v
Instances For
The total number of chips held at active vertices of $D$.
This quantity strictly decreases at each step of the $q$-reduction algorithm, providing
the termination measure for
q_effective_to_q_reduced.
Instances For
In a connected graph, every $q$-effective divisor is linearly equivalent to a $q$-reduced divisor.
The proof is by induction on reductionExcess.
Every divisor is linearly equivalent to some $q$-reduced divisor.
See: Corry-Perkinson, Theorem 3.6, part 1 (existence).
Every divisor is linearly equivalent to exactly one $q$-reduced divisor.
See: Corry-Perkinson, Theorem 3.6 (existence and uniqueness combined).
A divisor is winnable if and only if its $q$-reduced representative is effective.
See: Corry-Perkinson, Corollary 3.7, rephrased.
The handshaking theorem #
The classical handshaking theorem for loopless multigraphs: the sum of all vertex degrees
is twice the number of edges (sum_vertex_degree_eq_twice_card_edges). The proof double
counts vertex-edge incidences, via the general counting lemma sum_card_filter_eq_mul.
These facts concern only the graph itself, not its divisor theory; they are collected here
for independent use. In this library, the handshaking theorem computes the degree of the
canonical divisor (see degree_of_canonical_divisor in Orientation.lean).
If every element of $M$ matches exactly $c$ vertices under crit, then summing the
filtered counts over all vertices gives $c$ times the size of $M$.
Handshaking theorem: In a loopless multigraph $G$, the sum of the degrees of all vertices is twice the number of edges:
$$ \sum_{v \in V(G)} \deg(v) = 2 |E(G)|. $$