Snort
DefinitionSnort positions with a move bound#✓fully proved
Let \(G\) be a finite simple graph, let \(k\) be a natural number, and let \(A\) and \(B\) be finite sets of vertices of \(G\), the vertices coloured so far by the player to move and by the opponent. A legal move colours a vertex \(v\) that lies in neither \(A\) nor \(B\) and has no neighbour in \(B\). With move bound \(0\) the player to move loses. With move bound \(k + 1\) the player to move wins at \((A, B)\) exactly when some legal move \(v\) leaves a position \((B, A \cup \{v\})\) that the opponent, now to move with move bound \(k\), does not win.
def snortMoverWins [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] :
ℕ → Finset V → Finset V → Bool
| 0, _, _ => false
| k + 1, mine, theirs =>
decide (∃ v : V, v ∉ mine ∧ v ∉ theirs ∧ (∀ w ∈ theirs, ¬ G.Adj v w) ∧
snortMoverWins G k theirs (insert v mine) = false)
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 1 (rules of Snort).
DefinitionFirst player wins Snort#✓fully proved
Let \(G\) be a finite simple graph. In Snort on \(G\) the two players alternately colour a vertex that is not yet coloured and is not adjacent to any vertex coloured by the opponent, and a player with no legal move loses. The first player wins Snort on \(G\) when the player who moves first has a winning strategy from the position in which no vertex is coloured.
def SnortFirstPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = true
def snortMoverWins [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] :
ℕ → Finset V → Finset V → Bool
| 0, _, _ => false
| k + 1, mine, theirs =>
decide (∃ v : V, v ∉ mine ∧ v ∉ theirs ∧ (∀ w ∈ theirs, ¬ G.Adj v w) ∧
snortMoverWins G k theirs (insert v mine) = false)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:61
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 1.
Uses 1 · Used by 5
DefinitionSecond-player win in Snort#✓fully proved
Let \(G\) be a finite simple graph. In Snort on \(G\), two players alternately colour a vertex of \(G\) that is not yet coloured, each with their own colour, and a player may not colour a vertex adjacent to a vertex of the opponent's colour; a player with no legal move loses. The second player wins Snort on \(G\) if, starting from the position in which no vertex is coloured, the player who moves first has no winning strategy.
Every move colours a new vertex, so the game ends after at most \(|V(G)|\) moves and has no draws; hence this says that the second player has a winning strategy.
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
def snortMoverWins [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] :
ℕ → Finset V → Finset V → Bool
| 0, _, _ => false
| k + 1, mine, theirs =>
decide (∃ v : V, v ∉ mine ∧ v ∉ theirs ∧ (∀ w ∈ theirs, ¬ G.Adj v w) ∧
snortMoverWins G k theirs (insert v mine) = false)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:61
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 1.
Uses 1 · Used by 8
DefinitionSnort response pairs#✓fully proved
In Snort on a finite graph \(G\), a pair \((u, v)\) of vertices is a response pair if \(u \neq v\), \(u\) and \(v\) are not adjacent (so the first player colouring \(u\) and the second answering \(v\) is legal), and the first player, now to move, loses from the position in which the first player has coloured \(u\) and the second player has coloured \(v\).
The outcome is computed with a bound of \(|V(G)| - 2\) further moves, the number of uncoloured vertices, so the bound never cuts the game short.
def IsSnortResponsePair [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj]
(u v : V) : Prop :=
u ≠ v ∧ ¬ G.Adj u v ∧ snortMoverWins G (Fintype.card V - 2) {u} {v} = false
def snortMoverWins [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] :
ℕ → Finset V → Finset V → Bool
| 0, _, _ => false
| k + 1, mine, theirs =>
decide (∃ v : V, v ∉ mine ∧ v ∉ theirs ∧ (∀ w ∈ theirs, ¬ G.Adj v w) ∧
snortMoverWins G k theirs (insert v mine) = false)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:61
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 3 (response pair).
Uses 1 · Used by 1
DefinitionOppositions#✓fully proved
An opposition of a graph \(G\) is an automorphism \(f\) of \(G\) such that for every vertex \(v\), \(f(f(v)) = v\), \(f(v) \neq v\), and \(f(v)\) is not adjacent to \(v\); that is, an involutive automorphism moving every vertex outside its closed neighbourhood.
def IsOpposition (G : SimpleGraph V) (f : G ≃g G) : Prop :=
∀ v, f (f v) = v ∧ f v ≠ v ∧ ¬ G.Adj v (f v)
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 1 (after Kakihara).
DefinitionOpposable graphs#✓fully proved
A graph \(G\) is opposable if it has an opposition: an automorphism \(f\) of \(G\) such that for every vertex \(v\), \(f(f(v)) = v\), \(f(v) \neq v\), and \(f(v)\) is not adjacent to \(v\).
def IsOpposable (G : SimpleGraph V) : Prop :=
∃ f : G ≃g G, IsOpposition G f
def IsOpposition (G : SimpleGraph V) (f : G ≃g G) : Prop :=
∀ v, f (f v) = v ∧ f v ≠ v ∧ ¬ G.Adj v (f v)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:101
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 1.
Uses 1 · Used by 7
DefinitionAlmost opposable graph#✓fully proved
A graph \(G\) is almost opposable if there are a vertex \(u\) and a set \(S\) of vertices with \(u \in S \subseteq N[u]\), where \(N[u]\) is the closed neighbourhood of \(u\) (\(u\) together with its neighbours), such that the subgraph \(G - S\) induced on the vertices outside \(S\) is opposable.
def IsAlmostOpposable (G : SimpleGraph V) : Prop :=
∃ u : V, ∃ S : Set V, u ∈ S ∧ S ⊆ insert u (G.neighborSet u) ∧ IsOpposable (G.induce Sᶜ)
def IsOpposable (G : SimpleGraph V) : Prop :=
∃ f : G ≃g G, IsOpposition G f
WantedExt/GraphTheory/SnortOppositionsWanted.lean:108
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 4 (almost opposable graphs).
Uses 1 · Used by 4
DefinitionCompatibly almost opposable graphs#✓fully proved
A graph \(G\) is compatibly almost opposable if there are a vertex \(u\), a set \(S\) of vertices with \(u \in S \subseteq N[u]\) (the closed neighbourhood of \(u\)), an automorphism \(\alpha\) of \(G\) with \(\alpha(\alpha(v)) = v\) for every vertex \(v\), and an opposition \(f\) of the subgraph \(G - S\) induced on the vertices outside \(S\), such that \(\alpha(x) = f(x)\) for every vertex \(x \notin S\).
def IsCompatiblyAlmostOpposable (G : SimpleGraph V) : Prop :=
∃ u : V, ∃ S : Set V, u ∈ S ∧ S ⊆ insert u (G.neighborSet u) ∧
∃ α : G ≃g G, (∀ v, α (α v) = v) ∧
∃ f : G.induce Sᶜ ≃g G.induce Sᶜ, IsOpposition _ f ∧ ∀ x : ↥Sᶜ, α x = (f x : V)
def IsOpposition (G : SimpleGraph V) (f : G ≃g G) : Prop :=
∀ v, f (f v) = v ∧ f v ≠ v ∧ ¬ G.Adj v (f v)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:101
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 4 (compatibly almost opposable graphs).
Uses 1 · Used by 2
DefinitionOpposition matchings#✓fully proved
Let \(K\) be a graph. A subgraph \(M\) of \(K\) is an opposition matching of \(K\) if it is a perfect matching of \(K\) and for any two distinct edges \(ab\) and \(cd\) of \(M\), \(ac \in E(K) \iff bd \in E(K)\) and \(ad \in E(K) \iff bc \in E(K)\).
Since both matching edges are present, this says that \(K\) induces on \(\{a, b, c, d\}\) either \(K_4\), a \(4\)-cycle, or just the two matching edges.
def IsOppositionMatching (K : SimpleGraph V) (M : K.Subgraph) : Prop :=
M.IsPerfectMatching ∧ ∀ a b c d, M.Adj a b → M.Adj c d → s(a, b) ≠ s(c, d) →
(K.Adj a c ↔ K.Adj b d) ∧ (K.Adj a d ↔ K.Adj b c)
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 2 (opposition matchings).
Used by 1
DefinitionGraph product given by a Boolean formula#✓fully proved
Let \(G\) and \(H\) be graphs with vertex sets \(V\) and \(W\), and let \(\varphi\) be a Boolean function of four Boolean arguments. The product \(G \varphi H\) is the graph on \(V \times W\) in which two distinct vertices \((g_1, h_1)\) and \((g_2, h_2)\) are adjacent exactly when \(\varphi(g_1 g_2 \in E(G), h_1 h_2 \in E(H), g_1 = g_2, h_1 = h_2)\) is true.
def formulaProduct [DecidableEq V] [DecidableEq W] (φ : Bool → Bool → Bool → Bool → Bool)
(G : SimpleGraph V) (H : SimpleGraph W) [DecidableRel G.Adj] [DecidableRel H.Adj] :
SimpleGraph (V × W) :=
SimpleGraph.fromRel fun x y => φ (G.Adj x.1 y.1) (H.Adj x.2 y.2) (x.1 = y.1) (x.2 = y.2)
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 2 (graph products
GφH).
AbbreviationStrong product of graphs#✓fully proved
For simple graphs \(G\) on \(V\) and \(H\) on \(W\), the strong product \(G \boxtimes H\) is the simple graph on \(V \times W\) in which \((g_1, h_1)\) and \((g_2, h_2)\) are adjacent if and only if \(g_1 = g_2\) and \(h_1 h_2\) is an edge of \(H\), or \(g_1 g_2\) is an edge of \(G\) and \(h_1 = h_2\), or \(g_1 g_2\) is an edge of \(G\) and \(h_1 h_2\) is an edge of \(H\).
abbrev strongProd [DecidableEq V] [DecidableEq W] (G : SimpleGraph V) (H : SimpleGraph W)
[DecidableRel G.Adj] [DecidableRel H.Adj] : SimpleGraph (V × W) :=
formulaProduct (fun eG eH qG qH => (qG && eH) || (eG && qH) || (eG && eH)) G H
def formulaProduct [DecidableEq V] [DecidableEq W] (φ : Bool → Bool → Bool → Bool → Bool)
(G : SimpleGraph V) (H : SimpleGraph W) [DecidableRel G.Adj] [DecidableRel H.Adj] :
SimpleGraph (V × W) :=
SimpleGraph.fromRel fun x y => φ (G.Adj x.1 y.1) (H.Adj x.2 y.2) (x.1 = y.1) (x.2 = y.2)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:147
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 2 (table of products).
DefinitionFirework of a graph#✓fully proved
For a graph \(G\), vertices \(u\) and \(v\) of \(G\) and a natural number \(n\), the \(n\)-firework of \(G\) at \((u, v)\) is the graph obtained from \(G\) by adding \(2n\) new vertices, \(n\) of which are adjacent only to \(u\) and the other \(n\) adjacent only to \(v\).
def firework (G : SimpleGraph V) (u v : V) (n : ℕ) : SimpleGraph (V ⊕ (Fin n × Bool)) :=
SimpleGraph.fromRel fun x y => match x, y with
| Sum.inl a, Sum.inl b => G.Adj a b
| Sum.inl a, Sum.inr (_, false) => a = u
| Sum.inl a, Sum.inr (_, true) => a = v
| _, _ => False
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 3 (the
n-firework).
Used by 1
DefinitionStrong grid#✓fully proved
For \(k \in \mathbb{N}\) and natural numbers \(n_0, \dots, n_{k-1}\), the \(k\)-dimensional strong grid \(P_{n_0} \boxtimes \cdots \boxtimes P_{n_{k-1}}\) is the simple graph whose vertices are the tuples \((x_0, \dots, x_{k-1})\) of integers with \(0 \le x_i < n_i\) for each \(i\), in which two vertices \(x\) and \(y\) are adjacent if and only if \(x \ne y\) and \(|x_i - y_i| \le 1\) for every \(i\).
def strongGrid {k : ℕ} (n : Fin k → ℕ) : SimpleGraph ((i : Fin k) → Fin (n i)) :=
SimpleGraph.fromRel fun x y => ∀ i, (x i : ℕ) ≤ y i + 1 ∧ (y i : ℕ) ≤ x i + 1
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Corollary 3 (strong grids).
Used by 1
DefinitionCartesian grid#✓fully proved
For \(k \in \mathbb{N}\) and side lengths \(n_1, \dots, n_k \in \mathbb{N}\), the \(k\)-dimensional Cartesian grid has as vertices the tuples \((x_1, \dots, x_k)\) of integers with \(0 \le x_i < n_i\) for each \(i\), and two tuples are adjacent when they differ in exactly one coordinate, and there by exactly one. It is the Cartesian product \(P_{n_1} \square \cdots \square P_{n_k}\) of the paths \(P_{n_i}\) on \(n_i\) vertices.
def cartesianGrid {k : ℕ} (n : Fin k → ℕ) : SimpleGraph ((i : Fin k) → Fin (n i)) :=
SimpleGraph.fromRel fun x y => ∃ i, (x i : ℕ) + 1 = y i ∧ ∀ j, j ≠ i → x j = y j
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Corollary 4 (Cartesian grids).
Used by 1
DefinitionKing's graph#✓fully proved
For natural numbers \(n\) and \(m\), the king's graph of the \(n \times m\) board is the simple graph whose vertices are the pairs \((i, j)\) with \(0 \le i < n\) and \(0 \le j < m\), in which two distinct pairs \((i, j)\) and \((i', j')\) are adjacent when \(|i - i'| \le 1\) and \(|j - j'| \le 1\).
def kingGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y => |(x.1 : ℤ) - y.1| ≤ 1 ∧ |(x.2 : ℤ) - y.2| ≤ 1
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 5.
Used by 1
DefinitionKnight's graph#✓fully proved
For natural numbers \(n\) and \(m\), the knight's graph of the \(n \times m\) board is the simple graph whose vertices are the pairs \((i, j)\) with \(0 \le i < n\) and \(0 \le j < m\), in which two pairs \((i, j)\) and \((i', j')\) are adjacent when either \(|i - i'| = 1\) and \(|j - j'| = 2\), or \(|i - i'| = 2\) and \(|j - j'| = 1\).
def knightGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y =>
(|(x.1 : ℤ) - y.1| = 1 ∧ |(x.2 : ℤ) - y.2| = 2) ∨
(|(x.1 : ℤ) - y.1| = 2 ∧ |(x.2 : ℤ) - y.2| = 1)
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 5 (proof of Theorem 9).
Used by 1
DefinitionBishop's graph#✓fully proved
For natural numbers \(n\) and \(m\), the bishop's graph on the \(n \times m\) board has as vertices the cells \((i, j)\) with \(0 \le i < n\) and \(0 \le j < m\), and two distinct cells \((i, j)\) and \((i', j')\) are adjacent when they lie on a common diagonal, that is, when \(|i - i'| = |j - j'|\).
def bishopGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y => |(x.1 : ℤ) - y.1| = |(x.2 : ℤ) - y.2|
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 5 (proof of Theorem 10).
Used by 1
DefinitionQueen's graph#✓fully proved
For natural numbers \(n\) and \(m\), the queen's graph of the \(n \times m\) board is the simple graph whose vertices are the pairs \((i, j)\) with \(0 \le i < n\) and \(0 \le j < m\), in which two distinct pairs \((i, j)\) and \((i', j')\) are adjacent when \(i = i'\), or \(j = j'\), or \(|i - i'| = |j - j'|\); that is, when they share a row, a column or a diagonal.
def queenGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y =>
x.1 = y.1 ∨ x.2 = y.2 ∨ |(x.1 : ℤ) - y.1| = |(x.2 : ℤ) - y.2|
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 5.
TheoremSnort on two vertices#✓fully proved
The first player wins Snort on the complete graph \(K_2\), and the second player wins Snort on the graph with two vertices and no edges.
theorem snort_two_vertices :
SnortFirstPlayerWins (⊤ : SimpleGraph (Fin 2)) ∧
SnortSecondPlayerWins (⊥ : SimpleGraph (Fin 2))
def SnortFirstPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = true
WantedExt/GraphTheory/SnortOppositionsWanted.lean:72
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:80
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 1; characteristic check of
snortMoverWins.
Uses 3
TheoremSnort on the \(2 \times 2\) queen's and rook's graphs#✓fully proved
The first player wins Snort on the queen's graph of the \(2 \times 2\) board (the Peaceable Queens game), and the second player wins Snort on the rook's graph of the \(2 \times 2\) board (the Peaceable Rooks game).
theorem snort_two_by_two :
SnortFirstPlayerWins (queenGraph 2 2) ∧ SnortSecondPlayerWins (SimpleGraph.rookGraph 2 2)
def SnortFirstPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = true
WantedExt/GraphTheory/SnortOppositionsWanted.lean:72
def queenGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y =>
x.1 = y.1 ∨ x.2 = y.2 ∨ |(x.1 : ℤ) - y.1| = |(x.2 : ℤ) - y.2|
WantedExt/GraphTheory/SnortOppositionsWanted.lean:237
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:80
def rookGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) where
Adj x y := x ≠ y ∧ (x.1 = y.1 ∨ x.2 = y.2)
symm := ⟨by
rintro x y ⟨hxy, h | h⟩
· exact ⟨hxy.symm, Or.inl h.symm⟩
· exact ⟨hxy.symm, Or.inr h.symm⟩⟩
loopless := ⟨by
intro x hx
exact hx.1 rfl⟩
MathlibExt/Combinatorics/SimpleGraph/RookGraph.lean:26
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Section 5; characteristic check of
queenGraphandSimpleGraph.rookGraph.
Uses 5
TheoremThe second player wins Snort on opposable graphs#●ready to prove
If a finite simple graph \(G\) is opposable, then the second player wins Snort on \(G\).
public theorem_wanted snortSecondPlayerWins_of_isOpposable [Fintype V] [DecidableEq V]
(G : SimpleGraph V) [DecidableRel G.Adj] (h : IsOpposable G) : SnortSecondPlayerWins G
def IsOpposable (G : SimpleGraph V) : Prop :=
∃ f : G ≃g G, IsOpposition G f
WantedExt/GraphTheory/SnortOppositionsWanted.lean:108
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:80
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Lemma 1 (Kakihara, Proposition 3.6).
Uses 2
TheoremOppositions and opposition matchings#●ready to prove
A graph \(G\) is opposable if and only if its complement \(\overline{G}\) has an opposition matching.
public theorem_wanted isOpposable_iff_exists_oppositionMatching (G : SimpleGraph V) :
IsOpposable G ↔ ∃ M : Gᶜ.Subgraph, IsOppositionMatching Gᶜ M
def IsOpposable (G : SimpleGraph V) : Prop :=
∃ f : G ≃g G, IsOpposition G f
WantedExt/GraphTheory/SnortOppositionsWanted.lean:108
def IsOppositionMatching (K : SimpleGraph V) (M : K.Subgraph) : Prop :=
M.IsPerfectMatching ∧ ∀ a b c d, M.Adj a b → M.Adj c d → s(a, b) ≠ s(c, d) →
(K.Adj a c ↔ K.Adj b d) ∧ (K.Adj a d ↔ K.Adj b c)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:137
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 1.
Uses 2
TheoremGluing oppositions of blocks#●ready to prove
Let \(G\) be a graph, let \(p\) be a map from its vertices to an index set, with blocks \(B_i = \{v : p(v) = i\}\), and let \(f\) be a map from the vertices of \(G\) to themselves. Suppose that for every index \(i\) there is an opposition of the subgraph of \(G\) induced on \(B_i\) that agrees with \(f\) on \(B_i\), and that for all vertices \(u, w\) with \(p(u) \neq p(w)\) we have \(uw \in E(G) \iff f(u)f(w) \in E(G)\) and \(uf(w) \in E(G) \iff f(u)w \in E(G)\). Then \(G\) is opposable.
Since \(uf(u)\) and \(wf(w)\) are non-edges, the second condition says that the four vertices \(u, f(u), w, f(w)\) induce \(C_4\), \(2K_2\) or \(4K_1\).
public theorem_wanted isOpposable_of_blocks {ι : Type*} (G : SimpleGraph V) (p : V → ι)
(f : V → V)
(hf : ∀ i, ∃ φ : G.induce {v | p v = i} ≃g G.induce {v | p v = i},
IsOpposition _ φ ∧ ∀ x, (φ x : V) = f x)
(hpair : ∀ u w, p u ≠ p w →
(G.Adj u w ↔ G.Adj (f u) (f w)) ∧ (G.Adj u (f w) ↔ G.Adj (f u) w)) :
IsOpposable G
def IsOpposition (G : SimpleGraph V) (f : G ≃g G) : Prop :=
∀ v, f (f v) = v ∧ f v ≠ v ∧ ¬ G.Adj v (f v)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:101
def IsOpposable (G : SimpleGraph V) : Prop :=
∃ f : G ≃g G, IsOpposition G f
WantedExt/GraphTheory/SnortOppositionsWanted.lean:108
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 2.
Uses 2
TheoremFormula products with an opposable first factor#●ready to prove
Let \(G\) and \(H\) be graphs, let \(\varphi\) be a Boolean function of four truth values, and let \(G \varphi H\) be the formula product, in which distinct pairs \((g_1, h_1)\) and \((g_2, h_2)\) are adjacent when \(\varphi\) is true at the atoms \(g_1g_2 \in E(G)\), \(h_1h_2 \in E(H)\), \(g_1 = g_2\), \(h_1 = h_2\). Suppose that for all distinct non-adjacent vertices \(g_1, g_2\) of \(G\) and every vertex \(h\) of \(H\), \(\varphi\) is false at the atoms \(g_1g_2 \in E(G)\), \(hh \in E(H)\), \(g_1 = g_2\), \(h = h\) (whose values are false, false, false, true). If \(G\) is opposable, then \(G \varphi H\) is opposable.
public theorem_wanted isOpposable_formulaProduct [DecidableEq V] [DecidableEq W]
(φ : Bool → Bool → Bool → Bool → Bool) (G : SimpleGraph V) (H : SimpleGraph W)
[DecidableRel G.Adj] [DecidableRel H.Adj]
(hφ : ∀ g₁ g₂ : V, ∀ h : W, g₁ ≠ g₂ → ¬ G.Adj g₁ g₂ →
φ (G.Adj g₁ g₂) (H.Adj h h) (g₁ = g₂) (h = h) = false)
(hG : IsOpposable G) : IsOpposable (formulaProduct φ G H)
def IsOpposable (G : SimpleGraph V) : Prop :=
∃ f : G ≃g G, IsOpposition G f
WantedExt/GraphTheory/SnortOppositionsWanted.lean:108
def formulaProduct [DecidableEq V] [DecidableEq W] (φ : Bool → Bool → Bool → Bool → Bool)
(G : SimpleGraph V) (H : SimpleGraph W) [DecidableRel G.Adj] [DecidableRel H.Adj] :
SimpleGraph (V × W) :=
SimpleGraph.fromRel fun x y => φ (G.Adj x.1 y.1) (H.Adj x.2 y.2) (x.1 = y.1) (x.2 = y.2)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:147
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 3.
Uses 2
TheoremStandard products with an opposable first factor#●ready to prove
If \(G\) is an opposable graph, then for every graph \(H\) the Cartesian product \(G \mathbin{\square} H\), the strong product \(G \boxtimes H\), and the tensor, lexicographic, co-normal and homomorphic products of \(G\) with \(H\) are opposable. Here distinct pairs \((g_1, h_1)\) and \((g_2, h_2)\) are adjacent in the tensor product when \(g_1g_2 \in E(G)\) and \(h_1h_2 \in E(H)\); in the lexicographic product when \(g_1g_2 \in E(G)\), or \(g_1 = g_2\) and \(h_1h_2 \in E(H)\); in the co-normal product when \(g_1g_2 \in E(G)\) or \(h_1h_2 \in E(H)\); and in the homomorphic product when \(g_1 = g_2\), or \(g_1g_2 \in E(G)\) and \(h_1h_2 \notin E(H)\).
public theorem_wanted isOpposable_products [DecidableEq V] [DecidableEq W]
(G : SimpleGraph V) (H : SimpleGraph W) [DecidableRel G.Adj] [DecidableRel H.Adj]
(hG : IsOpposable G) :
IsOpposable (G □ H) ∧ IsOpposable (strongProd G H) ∧
IsOpposable (formulaProduct (fun eG eH _ _ => eG && eH) G H) ∧
IsOpposable (formulaProduct (fun eG eH qG _ => eG || (qG && eH)) G H) ∧
IsOpposable (formulaProduct (fun eG eH _ _ => eG || eH) G H) ∧
IsOpposable (formulaProduct (fun eG eH qG _ => qG || (eG && !eH)) G H)
def IsOpposable (G : SimpleGraph V) : Prop :=
∃ f : G ≃g G, IsOpposition G f
WantedExt/GraphTheory/SnortOppositionsWanted.lean:108
abbrev strongProd [DecidableEq V] [DecidableEq W] (G : SimpleGraph V) (H : SimpleGraph W)
[DecidableRel G.Adj] [DecidableRel H.Adj] : SimpleGraph (V × W) :=
formulaProduct (fun eG eH qG qH => (qG && eH) || (eG && qH) || (eG && eH)) G H
WantedExt/GraphTheory/SnortOppositionsWanted.lean:158
def formulaProduct [DecidableEq V] [DecidableEq W] (φ : Bool → Bool → Bool → Bool → Bool)
(G : SimpleGraph V) (H : SimpleGraph W) [DecidableRel G.Adj] [DecidableRel H.Adj] :
SimpleGraph (V × W) :=
SimpleGraph.fromRel fun x y => φ (G.Adj x.1 y.1) (H.Adj x.2 y.2) (x.1 = y.1) (x.2 = y.2)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:147
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Corollary 1.
Uses 3
TheoremFireworks preserve second-player wins in Snort#●ready to prove
Let \(G\) be a finite simple graph and let \((u, v)\) be a response pair of \(G\) whose distance in \(G\) is at least \(3\) (infinite distance, when \(u\) and \(v\) lie in different components, is allowed). If the second player wins Snort on \(G\), then for every natural number \(n\) at least the number \(|V(G)|\) of vertices of \(G\), the second player wins Snort on the \(n\)-firework of \(G\) at \((u, v)\).
public theorem_wanted snortSecondPlayerWins_firework [Fintype V] [DecidableEq V]
(G : SimpleGraph V) [DecidableRel G.Adj] (u v : V) (hG : SnortSecondPlayerWins G)
(huv : IsSnortResponsePair G u v) (hdist : 3 ≤ G.edist u v) (n : ℕ)
(hn : Fintype.card V ≤ n) [DecidableRel (firework G u v n).Adj] :
SnortSecondPlayerWins (firework G u v n)
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:80
def IsSnortResponsePair [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj]
(u v : V) : Prop :=
u ≠ v ∧ ¬ G.Adj u v ∧ snortMoverWins G (Fintype.card V - 2) {u} {v} = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:91
def firework (G : SimpleGraph V) (u v : V) (n : ℕ) : SimpleGraph (V ⊕ (Fin n × Bool)) :=
SimpleGraph.fromRel fun x y => match x, y with
| Sum.inl a, Sum.inl b => G.Adj a b
| Sum.inl a, Sum.inr (_, false) => a = u
| Sum.inl a, Sum.inr (_, true) => a = v
| _, _ => False
WantedExt/GraphTheory/SnortOppositionsWanted.lean:167
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 4.
Uses 3
TheoremArbitrarily large trees on which the second player wins Snort#●ready to prove
For every natural number \(N\) there is a tree \(T\) on \(n \ge N\) vertices such that the second player wins Snort on \(T\).
public theorem_wanted exists_large_tree_snortSecondPlayerWins (N : ℕ) :
∃ n ≥ N, ∃ T : SimpleGraph (Fin n), ∃ _ : DecidableRel T.Adj,
T.IsTree ∧ SnortSecondPlayerWins T
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:80
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Corollary 2.
Uses 1
TheoremAlmost opposable graphs are first-player wins in Snort#●ready to prove
For every finite simple graph \(G\) that is almost opposable, the first player wins Snort on \(G\).
public theorem_wanted snortFirstPlayerWins_of_isAlmostOpposable [Fintype V] [DecidableEq V]
(G : SimpleGraph V) [DecidableRel G.Adj] (h : IsAlmostOpposable G) : SnortFirstPlayerWins G
def IsAlmostOpposable (G : SimpleGraph V) : Prop :=
∃ u : V, ∃ S : Set V, u ∈ S ∧ S ⊆ insert u (G.neighborSet u) ∧ IsOpposable (G.induce Sᶜ)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:116
def SnortFirstPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = true
WantedExt/GraphTheory/SnortOppositionsWanted.lean:72
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Lemma 3.
Uses 2
TheoremStrong products of compatibly almost opposable graphs#●ready to prove
If \(G\) and \(H\) are compatibly almost opposable graphs, then their strong product \(G \boxtimes H\) is compatibly almost opposable.
public theorem_wanted isCompatiblyAlmostOpposable_strongProd [DecidableEq V] [DecidableEq W]
(G : SimpleGraph V) (H : SimpleGraph W) [DecidableRel G.Adj] [DecidableRel H.Adj]
(hG : IsCompatiblyAlmostOpposable G) (hH : IsCompatiblyAlmostOpposable H) :
IsCompatiblyAlmostOpposable (strongProd G H)
def IsCompatiblyAlmostOpposable (G : SimpleGraph V) : Prop :=
∃ u : V, ∃ S : Set V, u ∈ S ∧ S ⊆ insert u (G.neighborSet u) ∧
∃ α : G ≃g G, (∀ v, α (α v) = v) ∧
∃ f : G.induce Sᶜ ≃g G.induce Sᶜ, IsOpposition _ f ∧ ∀ x : ↥Sᶜ, α x = (f x : V)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:125
abbrev strongProd [DecidableEq V] [DecidableEq W] (G : SimpleGraph V) (H : SimpleGraph W)
[DecidableRel G.Adj] [DecidableRel H.Adj] : SimpleGraph (V × W) :=
formulaProduct (fun eG eH qG qH => (qG && eH) || (eG && qH) || (eG && eH)) G H
WantedExt/GraphTheory/SnortOppositionsWanted.lean:158
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 5.
Uses 2
TheoremStrong products with a graph that has a universal vertex#●ready to prove
Let \(G\) and \(H\) be graphs. If \(G\) is almost opposable and \(H\) has a universal vertex, that is, a vertex adjacent to every other vertex of \(H\), then the strong product \(G \boxtimes H\) is almost opposable.
public theorem_wanted isAlmostOpposable_strongProd [DecidableEq V] [DecidableEq W]
(G : SimpleGraph V) (H : SimpleGraph W) [DecidableRel G.Adj] [DecidableRel H.Adj]
(hG : IsAlmostOpposable G) (hH : ∃ v, ∀ w, w ≠ v → H.Adj v w) :
IsAlmostOpposable (strongProd G H)
def IsAlmostOpposable (G : SimpleGraph V) : Prop :=
∃ u : V, ∃ S : Set V, u ∈ S ∧ S ⊆ insert u (G.neighborSet u) ∧ IsOpposable (G.induce Sᶜ)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:116
abbrev strongProd [DecidableEq V] [DecidableEq W] (G : SimpleGraph V) (H : SimpleGraph W)
[DecidableRel G.Adj] [DecidableRel H.Adj] : SimpleGraph (V × W) :=
formulaProduct (fun eG eH qG qH => (qG && eH) || (eG && qH) || (eG && eH)) G H
WantedExt/GraphTheory/SnortOppositionsWanted.lean:158
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 6.
Uses 2
TheoremCartesian products of compatibly almost opposable graphs#●ready to prove
Let \(G\) and \(H\) be compatibly almost opposable graphs. Suppose that for some vertex \(u\) of \(G\) there are an involutive automorphism \(\alpha\) of \(G\) and an opposition \(f\) of the induced subgraph \(G - u\) on the vertices other than \(u\) such that \(\alpha(x) = f(x)\) for every vertex \(x \neq u\). Then the Cartesian product \(G \square H\) is compatibly almost opposable.
public theorem_wanted isCompatiblyAlmostOpposable_boxProd (G : SimpleGraph V)
(H : SimpleGraph W) (hG : IsCompatiblyAlmostOpposable G) (hH : IsCompatiblyAlmostOpposable H)
(hu : ∃ u : V, ∃ α : G ≃g G, (∀ v, α (α v) = v) ∧
∃ f : G.induce ({u}ᶜ : Set V) ≃g G.induce ({u}ᶜ : Set V),
IsOpposition _ f ∧ ∀ x : ↥({u}ᶜ : Set V), α x = (f x : V)) :
IsCompatiblyAlmostOpposable (G □ H)
def IsCompatiblyAlmostOpposable (G : SimpleGraph V) : Prop :=
∃ u : V, ∃ S : Set V, u ∈ S ∧ S ⊆ insert u (G.neighborSet u) ∧
∃ α : G ≃g G, (∀ v, α (α v) = v) ∧
∃ f : G.induce Sᶜ ≃g G.induce Sᶜ, IsOpposition _ f ∧ ∀ x : ↥Sᶜ, α x = (f x : V)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:125
def IsOpposition (G : SimpleGraph V) (f : G ≃g G) : Prop :=
∀ v, f (f v) = v ∧ f v ≠ v ∧ ¬ G.Adj v (f v)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:101
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 7.
Uses 2
TheoremAlmost opposability of strong grids#●ready to prove
Let \(k \ge 1\) and \(n_1, \dots, n_k \ge 1\). Then the \(k\)-dimensional strong grid \(P_{n_1} \boxtimes \cdots \boxtimes P_{n_k}\), the strong product of the paths \(P_{n_i}\) on \(n_i\) vertices, is almost opposable.
public theorem_wanted isAlmostOpposable_strongGrid {k : ℕ} (hk : 1 ≤ k) (n : Fin k → ℕ)
(hn : ∀ i, 1 ≤ n i) : IsAlmostOpposable (strongGrid n)
def IsAlmostOpposable (G : SimpleGraph V) : Prop :=
∃ u : V, ∃ S : Set V, u ∈ S ∧ S ⊆ insert u (G.neighborSet u) ∧ IsOpposable (G.induce Sᶜ)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:116
def strongGrid {k : ℕ} (n : Fin k → ℕ) : SimpleGraph ((i : Fin k) → Fin (n i)) :=
SimpleGraph.fromRel fun x y => ∀ i, (x i : ℕ) ≤ y i + 1 ∧ (y i : ℕ) ≤ x i + 1
WantedExt/GraphTheory/SnortOppositionsWanted.lean:180
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Corollary 3.
Uses 2
TheoremOpposability of Cartesian grids#●ready to prove
Let \(k \ge 1\) and \(n_1, \dots, n_k \ge 1\), and let \(G = P_{n_1} \square \cdots \square P_{n_k}\) be the \(k\)-dimensional Cartesian grid, the Cartesian product of the paths \(P_{n_i}\) on \(n_i\) vertices. Then \(G\) is almost opposable if and only if at most one of \(n_1, \dots, n_k\) is even, and \(G\) is opposable if more than one of them is even.
public theorem_wanted cartesianGrid_opposability {k : ℕ} (hk : 1 ≤ k) (n : Fin k → ℕ)
(hn : ∀ i, 1 ≤ n i) :
(IsAlmostOpposable (cartesianGrid n) ↔ (Finset.univ.filter fun i => Even (n i)).card ≤ 1) ∧
(1 < (Finset.univ.filter fun i => Even (n i)).card → IsOpposable (cartesianGrid n))
def IsAlmostOpposable (G : SimpleGraph V) : Prop :=
∃ u : V, ∃ S : Set V, u ∈ S ∧ S ⊆ insert u (G.neighborSet u) ∧ IsOpposable (G.induce Sᶜ)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:116
def cartesianGrid {k : ℕ} (n : Fin k → ℕ) : SimpleGraph ((i : Fin k) → Fin (n i)) :=
SimpleGraph.fromRel fun x y => ∃ i, (x i : ℕ) + 1 = y i ∧ ∀ j, j ≠ i → x j = y j
WantedExt/GraphTheory/SnortOppositionsWanted.lean:192
def IsOpposable (G : SimpleGraph V) : Prop :=
∃ f : G ≃g G, IsOpposition G f
WantedExt/GraphTheory/SnortOppositionsWanted.lean:108
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Corollary 4.
Uses 3
TheoremFirst player wins Peaceable Kings#●ready to prove
For all natural numbers \(n \ge 1\) and \(m \ge 1\), the first player wins Snort on the king's graph of the \(n \times m\) board (the Peaceable Kings game).
public theorem_wanted snortFirstPlayerWins_kingGraph (n m : ℕ) (hn : 1 ≤ n) (hm : 1 ≤ m) :
SnortFirstPlayerWins (kingGraph n m)
def SnortFirstPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = true
WantedExt/GraphTheory/SnortOppositionsWanted.lean:72
def kingGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y => |(x.1 : ℤ) - y.1| ≤ 1 ∧ |(x.2 : ℤ) - y.2| ≤ 1
WantedExt/GraphTheory/SnortOppositionsWanted.lean:202
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 8.
Uses 2
TheoremSnort on the knight's graph#●ready to prove
For natural numbers \(n \ge 1\) and \(m \ge 1\), the second player wins Snort on the knight's graph of the \(n \times m\) board (the Peaceable Knights game) if and only if \(n\) is even or \(m\) is even.
public theorem_wanted snortSecondPlayerWins_knightGraph_iff (n m : ℕ) (hn : 1 ≤ n)
(hm : 1 ≤ m) : SnortSecondPlayerWins (knightGraph n m) ↔ Even n ∨ Even m
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:80
def knightGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y =>
(|(x.1 : ℤ) - y.1| = 1 ∧ |(x.2 : ℤ) - y.2| = 2) ∨
(|(x.1 : ℤ) - y.1| = 2 ∧ |(x.2 : ℤ) - y.2| = 1)
WantedExt/GraphTheory/SnortOppositionsWanted.lean:213
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 9.
Uses 2
TheoremSecond player wins Peaceable Bishops exactly when a side is even#●ready to prove
For all natural numbers \(n \ge 1\) and \(m \ge 1\), the second player wins Snort on the bishop's graph of the \(n \times m\) board (the Peaceable Bishops game) if and only if \(n\) or \(m\) is even.
public theorem_wanted snortSecondPlayerWins_bishopGraph_iff (n m : ℕ) (hn : 1 ≤ n)
(hm : 1 ≤ m) : SnortSecondPlayerWins (bishopGraph n m) ↔ Even n ∨ Even m
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:80
def bishopGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y => |(x.1 : ℤ) - y.1| = |(x.2 : ℤ) - y.2|
WantedExt/GraphTheory/SnortOppositionsWanted.lean:226
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 10.
Uses 2
TheoremSnort on the rook's graph#●ready to prove
For natural numbers \(n \ge 1\) and \(m \ge 1\), the second player wins Snort on the rook's graph of the \(n \times m\) board (the Peaceable Rooks game) if and only if \(n\) and \(m\) are both even.
public theorem_wanted snortSecondPlayerWins_rookGraph_iff (n m : ℕ) (hn : 1 ≤ n)
(hm : 1 ≤ m) : SnortSecondPlayerWins (SimpleGraph.rookGraph n m) ↔ Even n ∧ Even m
def SnortSecondPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = false
WantedExt/GraphTheory/SnortOppositionsWanted.lean:80
def rookGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) where
Adj x y := x ≠ y ∧ (x.1 = y.1 ∨ x.2 = y.2)
symm := ⟨by
rintro x y ⟨hxy, h | h⟩
· exact ⟨hxy.symm, Or.inl h.symm⟩
· exact ⟨hxy.symm, Or.inr h.symm⟩⟩
loopless := ⟨by
intro x hx
exact hx.1 rfl⟩
MathlibExt/Combinatorics/SimpleGraph/RookGraph.lean:26
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 11.
Uses 2
TheoremFirst player wins Peaceable Queens on boards with an odd side#●ready to prove
Let \(n \ge 1\) and \(m \ge 1\) be natural numbers such that \(n\) or \(m\) is odd. Then the first player wins Snort on the queen's graph of the \(n \times m\) board (the Peaceable Queens game).
public theorem_wanted snortFirstPlayerWins_queenGraph (n m : ℕ) (hn : 1 ≤ n) (hm : 1 ≤ m)
(h : Odd n ∨ Odd m) : SnortFirstPlayerWins (queenGraph n m)
def SnortFirstPlayerWins [Fintype V] [DecidableEq V] (G : SimpleGraph V)
[DecidableRel G.Adj] : Prop :=
snortMoverWins G (Fintype.card V) ∅ ∅ = true
WantedExt/GraphTheory/SnortOppositionsWanted.lean:72
def queenGraph (n m : ℕ) : SimpleGraph (Fin n × Fin m) :=
SimpleGraph.fromRel fun x y =>
x.1 = y.1 ∨ x.2 = y.2 ∨ |(x.1 : ℤ) - y.1| = |(x.2 : ℤ) - y.2|
WantedExt/GraphTheory/SnortOppositionsWanted.lean:237
Sources
- Ashmore, Austin, Davies, Dyer, Kellough, On Graph Automorphisms Related to SNORT, INTEGERS 26 (2026), Article G2, Theorem 12.
Uses 2
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.