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; num_edges 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 graph_connected. 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
- instDecidableEq : DecidableEq self.V
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
- vertex_degree G v = ∑ u : G.V, ↑(num_edges 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
firing_vector 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
- firing_move G D v w = if w = v then D v - vertex_degree G v else D w + ↑(num_edges 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
- borrowing_move G D v w = if w = v then D v + vertex_degree G v else D w - ↑(num_edges G v w)
Instances For
The result of firing a set $S$ of vertices, starting from a divisor $D$.
See: Corry-Perkinson, Definition 1.6.
Equations
- set_firing G D S w = D w + ∑ v ∈ S, if w = v then -vertex_degree G v else ↑(num_edges G v w)
Instances For
The principal divisor associated to firing a single vertex.
Equations
- firing_vector G v w = if w = v then -vertex_degree G v else ↑(num_edges G v w)
Instances For
Principal divisors and linear equivalence #
A firing script (firing_script 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 principal_divisors G is generated by the firing vectors
firing_vector G v for all $v$. Two divisors $D$ and $D'$ are linearly equivalent
(linear_equiv 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
- linear_equiv G D D' = (D' - D ∈ principal_divisors 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
- firing_script G = (G.V → ℤ)
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 principal_divisors 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, linear_equiv 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 laplacian_matrix 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.
Linearly equivalent divisors have the same degree.
See: Corry-Perkinson, Proposition 1.15.
The Laplacian matrix of a CFGraph.
See: Corry-Perkinson, Definition 2.6.
Equations
- laplacian_matrix G i j = if i = j then vertex_degree G i else -↑(num_edges G i j)
Instances For
Applies the Laplacian matrix to a firing script and a current divisor to obtain a new divisor.
Equations
- apply_laplacian G σ D v = D v - (laplacian_matrix 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 q_eff_div
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 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), linear_equiv 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
reduces_to 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.
The relation reduces_to G q D₁ D₂ holds when $D_2$ is obtained from $D_1$ by
applying a $q$-reducer script:
$$ D_2 = D_1 + \operatorname{prin}_G(\sigma) $$
for some $\sigma$ with $\sigma(q) \le \sigma(v)$ for all vertices $v$.
Equations
- reduces_to G q D₁ D₂ = ∃ (σ : firing_script G), q_reducer G q σ ∧ D₂ = D₁ + (prin G) σ
Instances For
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 reduction_excess — the total chips
at active vertices — strictly decreases at each reduction step.
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 = ∃ (σ : firing_script G), q_reducer G q σ ∧ q_effective 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 reduction_excess.
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)|. $$